home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #1 / Amiga Plus CD - 1997 - No. 01.iso / pd / programmierung / mesa-1.2.8 / src / get.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  95KB  |  3,148 lines

  1. /* get.c */
  2.  
  3. /*
  4.  * Mesa 3-D graphics library
  5.  * Version:  1.2
  6.  * Copyright (C) 1995  Brian Paul  (brianp@ssec.wisc.edu)
  7.  *
  8.  * This library is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Library General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2 of the License, or (at your option) any later version.
  12.  *
  13.  * This library is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Library General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Library General Public
  19.  * License along with this library; if not, write to the Free
  20.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22.  
  23.  
  24. /*
  25. $Id: get.c,v 1.23 1996/02/26 15:07:16 brianp Exp $
  26.  
  27. $Log: get.c,v $
  28.  * Revision 1.23  1996/02/26  15:07:16  brianp
  29.  * replaced CC.Current.Color with CC.Current.IntColor
  30.  *
  31.  * Revision 1.22  1996/02/19  21:50:16  brianp
  32.  * glGet(GL_ALPHA_BITS) now returns correct value for softare alpha buffering
  33.  *
  34.  * Revision 1.21  1996/02/15  16:01:01  brianp
  35.  * added vertex array extension support
  36.  *
  37.  * Revision 1.20  1996/01/17  15:16:34  brianp
  38.  * glGet(GL_INDEX_MODE) returned wrong result
  39.  *
  40.  * Revision 1.19  1996/01/11  20:14:38  brianp
  41.  * use new GLstencil datatype
  42.  *
  43.  * Revision 1.18  1995/12/18  17:25:55  brianp
  44.  * use new GLdepth and GLaccum datatypes
  45.  *
  46.  * Revision 1.17  1995/10/27  20:29:02  brianp
  47.  * added glPolygonOffsetEXT() support
  48.  *
  49.  * Revision 1.16  1995/10/14  16:29:18  brianp
  50.  * replaced dd_buffer_info with DD.buffer_size
  51.  *
  52.  * Revision 1.15  1995/08/31  21:29:33  brianp
  53.  * new TexGenEnabled bitfield
  54.  *
  55.  * Revision 1.14  1995/07/12  21:19:02  brianp
  56.  * bug fix:  glGet(GL_DEPTH_BITS) returned bytes, not bits (per Tor Stenvaag)
  57.  *
  58.  * Revision 1.13  1995/06/08  20:51:57  brianp
  59.  * added missing RenderMode to glGetDoublev()
  60.  *
  61.  * Revision 1.12  1995/05/22  21:02:41  brianp
  62.  * Release 1.2
  63.  *
  64.  * Revision 1.11  1995/05/17  13:52:37  brianp
  65.  * implemented glIndexMask(0) and glColorMask(0,0,0,0)
  66.  *
  67.  * Revision 1.10  1995/05/15  15:24:07  brianp
  68.  * replaced CC.CurrentListNum with gl_list_index()
  69.  *
  70.  * Revision 1.9  1995/05/12  19:26:43  brianp
  71.  * replaced CC.Mode!=0 with INSIDE_BEGIN_END
  72.  *
  73.  * Revision 1.8  1995/05/12  17:00:43  brianp
  74.  * changed CC.Mode!=0 to INSIDE_BEGIN_END
  75.  *
  76.  * Revision 1.7  1995/03/27  20:31:53  brianp
  77.  * new Texture.Enabled scheme
  78.  *
  79.  * Revision 1.6  1995/03/24  15:28:47  brianp
  80.  * replaced ACCUM_BITS with ACC_TYPE
  81.  *
  82.  * Revision 1.5  1995/03/22  21:37:22  brianp
  83.  * removed BufferDepth from CC
  84.  *
  85.  * Revision 1.4  1995/03/10  16:25:53  brianp
  86.  * updated for blending extensions
  87.  *
  88.  * Revision 1.3  1995/03/10  14:26:58  brianp
  89.  * implemented get(GL_CURRENT_RASTER_TEXTURE_COORDS)
  90.  *
  91.  * Revision 1.2  1995/03/04  19:29:44  brianp
  92.  * 1.1 beta revision
  93.  *
  94.  * Revision 1.1  1995/02/24  14:23:16  brianp
  95.  * Initial revision
  96.  *
  97.  */
  98.  
  99.  
  100. /* glGet functions */
  101.  
  102.  
  103. #include <string.h>
  104. #include "context.h"
  105. #include "dd.h"
  106. #include "list.h"
  107. #include "macros.h"
  108.  
  109.  
  110. #define FLOAT_TO_BOOL(X)    ( (X)==0.0F ? GL_FALSE : GL_TRUE )
  111. #define INT_TO_BOOL(I)        ( (I)==0 ? GL_FALSE : GL_TRUE )
  112. #define ENUM_TO_BOOL(E)        ( (E)==0 ? GL_FALSE : GL_TRUE )
  113. /*#define FLOAT_TO_INT(I)        ((GLint) (I * 2147483647.0))*/
  114.  
  115.  
  116.  
  117. /*
  118.  * Given a color component scale value such as CC.RedScale, CC.BlueScale,
  119.  * etc. return the number of bits implied by that scaling.  This is
  120.  * usually expressed by:  scale = 2^bits - 1.
  121.  * Example:  if RedScale==63.0, bits must be 6.
  122.  * Input:  a color component scale value
  123.  * Return:  number of bits implied by the scale value.
  124.  */
  125. static GLuint bits( GLfloat scale )
  126. {
  127.    GLuint iscale, bits;
  128.  
  129.    iscale = (GLuint) scale;
  130.    for (bits=0; iscale>0; bits++) {
  131.       iscale = iscale >> 1;
  132.    }
  133.    return bits;
  134. }
  135.  
  136.  
  137.  
  138. void glGetBooleanv( GLenum pname, GLboolean *params )
  139. {
  140.    GLuint i;
  141.  
  142.    if (INSIDE_BEGIN_END) {
  143.       gl_error( GL_INVALID_OPERATION, "glGetBooleanv" );
  144.       return;
  145.    }
  146.  
  147.    switch (pname) {
  148.       case GL_ACCUM_RED_BITS:
  149.       case GL_ACCUM_GREEN_BITS:
  150.       case GL_ACCUM_BLUE_BITS:
  151.       case GL_ACCUM_ALPHA_BITS:
  152.          *params = INT_TO_BOOL(sizeof(GLaccum)*8);
  153.          break;
  154.       case GL_ACCUM_CLEAR_VALUE:
  155.          params[0] = FLOAT_TO_BOOL(CC.Accum.ClearColor[0]);
  156.          params[1] = FLOAT_TO_BOOL(CC.Accum.ClearColor[1]);
  157.          params[2] = FLOAT_TO_BOOL(CC.Accum.ClearColor[2]);
  158.          params[3] = FLOAT_TO_BOOL(CC.Accum.ClearColor[3]);
  159.          break;
  160.       case GL_ALPHA_BIAS:
  161.          *params = FLOAT_TO_BOOL(CC.Pixel.AlphaBias);
  162.          break;
  163.       case GL_ALPHA_BITS:
  164.          if (CC.FrontAlphaEnabled || CC.BackAlphaEnabled) {
  165.             *params = GL_TRUE;
  166.          }
  167.          else {
  168.             *params = GL_FALSE;
  169.          }
  170.          break;
  171.       case GL_ALPHA_SCALE:
  172.          *params = FLOAT_TO_BOOL(CC.Pixel.AlphaScale);
  173.          break;
  174.       case GL_ALPHA_TEST:
  175.          *params = CC.Color.AlphaEnabled;
  176.          break;
  177.       case GL_ALPHA_TEST_FUNC:
  178.          *params = ENUM_TO_BOOL(CC.Color.AlphaFunc);
  179.          break;
  180.       case GL_ALPHA_TEST_REF:
  181.          *params = FLOAT_TO_BOOL(CC.Color.AlphaRef);
  182.          break;
  183.       case GL_ATTRIB_STACK_DEPTH:
  184.          *params = INT_TO_BOOL(CC.AttribStackDepth);
  185.          break;
  186.       case GL_AUTO_NORMAL:
  187.          *params = CC.Eval.AutoNormal;
  188.          break;
  189.       case GL_AUX_BUFFERS:
  190.          *params = (NUM_AUX_BUFFERS) ? GL_TRUE : GL_FALSE;
  191.          break;
  192.       case GL_BLEND:
  193.          *params = CC.Color.BlendEnabled;
  194.          break;
  195.       case GL_BLEND_DST:
  196.          *params = ENUM_TO_BOOL(CC.Color.BlendDst);
  197.          break;
  198.       case GL_BLEND_SRC:
  199.          *params = ENUM_TO_BOOL(CC.Color.BlendSrc);
  200.          break;
  201.       case GL_BLEND_EQUATION_EXT:
  202.      *params = ENUM_TO_BOOL( CC.Color.BlendEquation );
  203.      break;
  204.       case GL_BLEND_COLOR_EXT:
  205.      params[0] = FLOAT_TO_BOOL( CC.Color.BlendColor[0] );
  206.      params[1] = FLOAT_TO_BOOL( CC.Color.BlendColor[1] );
  207.      params[2] = FLOAT_TO_BOOL( CC.Color.BlendColor[2] );
  208.      params[3] = FLOAT_TO_BOOL( CC.Color.BlendColor[3] );
  209.      break;
  210.       case GL_BLUE_BIAS:
  211.          *params = FLOAT_TO_BOOL(CC.Pixel.BlueBias);
  212.          break;
  213.       case GL_BLUE_BITS:
  214.          *params = INT_TO_BOOL( bits( CC.BlueScale ) );
  215.          break;
  216.       case GL_BLUE_SCALE:
  217.          *params = FLOAT_TO_BOOL(CC.Pixel.BlueScale);
  218.          break;
  219.       case GL_CLIP_PLANE0:
  220.       case GL_CLIP_PLANE1:
  221.       case GL_CLIP_PLANE2:
  222.       case GL_CLIP_PLANE3:
  223.       case GL_CLIP_PLANE4:
  224.       case GL_CLIP_PLANE5:
  225.          *params = CC.Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  226.          break;
  227.       case GL_COLOR_CLEAR_VALUE:
  228.          params[0] = FLOAT_TO_BOOL(CC.Color.ClearColor[0]);
  229.          params[1] = FLOAT_TO_BOOL(CC.Color.ClearColor[1]);
  230.          params[2] = FLOAT_TO_BOOL(CC.Color.ClearColor[2]);
  231.          params[3] = FLOAT_TO_BOOL(CC.Color.ClearColor[3]);
  232.          break;
  233.       case GL_COLOR_MATERIAL:
  234.          *params = CC.Light.ColorMaterialEnabled;
  235.          break;
  236.       case GL_COLOR_MATERIAL_FACE:
  237.          *params = ENUM_TO_BOOL(CC.Light.ColorMaterialFace);
  238.          break;
  239.       case GL_COLOR_MATERIAL_PARAMETER:
  240.          *params = ENUM_TO_BOOL(CC.Light.ColorMaterialMode);
  241.          break;
  242.       case GL_COLOR_WRITEMASK:
  243.          params[0] = (CC.Color.ColorMask & 8) ? GL_TRUE : GL_FALSE;
  244.          params[1] = (CC.Color.ColorMask & 4) ? GL_TRUE : GL_FALSE;
  245.          params[2] = (CC.Color.ColorMask & 2) ? GL_TRUE : GL_FALSE;
  246.          params[3] = (CC.Color.ColorMask & 1) ? GL_TRUE : GL_FALSE;
  247.          break;
  248.       case GL_CULL_FACE:
  249.          *params = CC.Polygon.CullFlag;
  250.          break;
  251.       case GL_CULL_FACE_MODE:
  252.          *params = ENUM_TO_BOOL(CC.Polygon.CullFaceMode);
  253.          break;
  254.       case GL_CURRENT_COLOR:
  255.          params[0] = INT_TO_BOOL(CC.Current.IntColor[0]);
  256.          params[1] = INT_TO_BOOL(CC.Current.IntColor[1]);
  257.          params[2] = INT_TO_BOOL(CC.Current.IntColor[2]);
  258.          params[3] = INT_TO_BOOL(CC.Current.IntColor[3]);
  259.          break;
  260.       case GL_CURRENT_INDEX:
  261.          *params = INT_TO_BOOL(CC.Current.Index);
  262.          break;
  263.       case GL_CURRENT_NORMAL:
  264.          params[0] = FLOAT_TO_BOOL(CC.Current.Normal[0]);
  265.          params[1] = FLOAT_TO_BOOL(CC.Current.Normal[1]);
  266.          params[2] = FLOAT_TO_BOOL(CC.Current.Normal[2]);
  267.          break;
  268.       case GL_CURRENT_RASTER_COLOR:
  269.      params[0] = FLOAT_TO_BOOL(CC.Current.RasterColor[0]);
  270.      params[1] = FLOAT_TO_BOOL(CC.Current.RasterColor[1]);
  271.      params[2] = FLOAT_TO_BOOL(CC.Current.RasterColor[2]);
  272.      params[3] = FLOAT_TO_BOOL(CC.Current.RasterColor[3]);
  273.      break;
  274.       case GL_CURRENT_RASTER_DISTANCE:
  275.      *params = FLOAT_TO_BOOL(CC.Current.RasterDistance);
  276.      break;
  277.       case GL_CURRENT_RASTER_INDEX:
  278.      *params = FLOAT_TO_BOOL(CC.Current.RasterIndex);
  279.      break;
  280.       case GL_CURRENT_RASTER_POSITION:
  281.      params[0] = FLOAT_TO_BOOL(CC.Current.RasterPos[0]);
  282.      params[1] = FLOAT_TO_BOOL(CC.Current.RasterPos[1]);
  283.      params[2] = FLOAT_TO_BOOL(CC.Current.RasterPos[2]);
  284.      params[3] = FLOAT_TO_BOOL(CC.Current.RasterPos[3]);
  285.      break;
  286.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  287.          params[0] = FLOAT_TO_BOOL(CC.Current.RasterTexCoord[0]);
  288.          params[1] = FLOAT_TO_BOOL(CC.Current.RasterTexCoord[1]);
  289.          params[2] = FLOAT_TO_BOOL(CC.Current.RasterTexCoord[2]);
  290.          params[3] = FLOAT_TO_BOOL(CC.Current.RasterTexCoord[3]);
  291.      break;
  292.       case GL_CURRENT_RASTER_POSITION_VALID:
  293.          *params = CC.Current.RasterPosValid;
  294.      break;
  295.       case GL_CURRENT_TEXTURE_COORDS:
  296.          params[0] = FLOAT_TO_BOOL(CC.Current.TexCoord[0]);
  297.          params[1] = FLOAT_TO_BOOL(CC.Current.TexCoord[1]);
  298.          params[2] = FLOAT_TO_BOOL(CC.Current.TexCoord[2]);
  299.          params[3] = FLOAT_TO_BOOL(CC.Current.TexCoord[3]);
  300.      break;
  301.       case GL_DEPTH_BIAS:
  302.          *params = FLOAT_TO_BOOL(CC.Pixel.DepthBias);
  303.      break;
  304.       case GL_DEPTH_BITS:
  305.      *params = INT_TO_BOOL(8*sizeof(GLdepth));
  306.      break;
  307.       case GL_DEPTH_CLEAR_VALUE:
  308.          *params = FLOAT_TO_BOOL(CC.Depth.Clear);
  309.      break;
  310.       case GL_DEPTH_FUNC:
  311.          *params = ENUM_TO_BOOL(CC.Depth.Func);
  312.      break;
  313.       case GL_DEPTH_RANGE:
  314.          params[0] = FLOAT_TO_BOOL(CC.Viewport.Near);
  315.          params[1] = FLOAT_TO_BOOL(CC.Viewport.Far);
  316.      break;
  317.       case GL_DEPTH_SCALE:
  318.          *params = FLOAT_TO_BOOL(CC.Pixel.DepthScale);
  319.      break;
  320.       case GL_DEPTH_TEST:
  321.          *params = CC.Depth.Test;
  322.      break;
  323.       case GL_DEPTH_WRITEMASK:
  324.      *params = CC.Depth.Mask;
  325.      break;
  326.       case GL_DITHER:
  327.      *params = CC.Color.DitherFlag;
  328.      break;
  329.       case GL_DOUBLEBUFFER:
  330.      *params = CC.DBflag;
  331.      break;
  332.       case GL_DRAW_BUFFER:
  333.      *params = ENUM_TO_BOOL(CC.Color.DrawBuffer);
  334.      break;
  335.       case GL_EDGE_FLAG:
  336.      *params = CC.Current.EdgeFlag;
  337.      break;
  338.       case GL_FOG:
  339.      *params = CC.Fog.Enabled;
  340.      break;
  341.       case GL_FOG_COLOR:
  342.          params[0] = FLOAT_TO_BOOL(CC.Fog.Color[0]);
  343.          params[1] = FLOAT_TO_BOOL(CC.Fog.Color[1]);
  344.          params[2] = FLOAT_TO_BOOL(CC.Fog.Color[2]);
  345.          params[3] = FLOAT_TO_BOOL(CC.Fog.Color[3]);
  346.      break;
  347.       case GL_FOG_DENSITY:
  348.          *params = FLOAT_TO_BOOL(CC.Fog.Density);
  349.      break;
  350.       case GL_FOG_END:
  351.          *params = FLOAT_TO_BOOL(CC.Fog.End);
  352.      break;
  353.       case GL_FOG_HINT:
  354.      *params = ENUM_TO_BOOL(CC.Hint.Fog);
  355.      break;
  356.       case GL_FOG_INDEX:
  357.      *params = FLOAT_TO_BOOL(CC.Fog.Index);
  358.      break;
  359.       case GL_FOG_MODE:
  360.      *params = ENUM_TO_BOOL(CC.Fog.Mode);
  361.      break;
  362.       case GL_FOG_START:
  363.          *params = FLOAT_TO_BOOL(CC.Fog.End);
  364.      break;
  365.       case GL_FRONT_FACE:
  366.      *params = ENUM_TO_BOOL(CC.Polygon.FrontFace);
  367.      break;
  368.       case GL_GREEN_BIAS:
  369.          *params = FLOAT_TO_BOOL(CC.Pixel.GreenBias);
  370.      break;
  371.       case GL_GREEN_BITS:
  372.          *params = INT_TO_BOOL( bits( CC.GreenScale ) );
  373.      break;
  374.       case GL_GREEN_SCALE:
  375.          *params = FLOAT_TO_BOOL(CC.Pixel.GreenScale);
  376.      break;
  377.       case GL_INDEX_BITS:
  378.      {
  379.         GLuint width, height, depth;
  380.         (*DD.buffer_size)( &width, &height, &depth );
  381.         *params = INT_TO_BOOL(depth);
  382.      }
  383.      break;
  384.       case GL_INDEX_CLEAR_VALUE:
  385.      *params = INT_TO_BOOL(CC.Color.ClearIndex);
  386.      break;
  387.       case GL_INDEX_MODE:
  388.      *params = CC.RGBAflag ? GL_FALSE : GL_TRUE;
  389.      break;
  390.       case GL_INDEX_OFFSET:
  391.      *params = INT_TO_BOOL(CC.Pixel.IndexOffset);
  392.      break;
  393.       case GL_INDEX_SHIFT:
  394.      *params = INT_TO_BOOL(CC.Pixel.IndexShift);
  395.      break;
  396.       case GL_INDEX_WRITEMASK:
  397.      *params = INT_TO_BOOL(CC.Color.IndexMask);
  398.      break;
  399.       case GL_LIGHT0:
  400.       case GL_LIGHT1:
  401.       case GL_LIGHT2:
  402.       case GL_LIGHT3:
  403.       case GL_LIGHT4:
  404.       case GL_LIGHT5:
  405.       case GL_LIGHT6:
  406.       case GL_LIGHT7:
  407.      *params = CC.Light.Light[pname-GL_LIGHT0].Enabled;
  408.      break;
  409.       case GL_LIGHTING:
  410.      *params = CC.Light.Enabled;
  411.      break;
  412.       case GL_LIGHT_MODEL_AMBIENT:
  413.      params[0] = FLOAT_TO_BOOL(CC.Light.Model.Ambient[0]);
  414.      params[1] = FLOAT_TO_BOOL(CC.Light.Model.Ambient[1]);
  415.      params[2] = FLOAT_TO_BOOL(CC.Light.Model.Ambient[2]);
  416.      params[3] = FLOAT_TO_BOOL(CC.Light.Model.Ambient[3]);
  417.      break;
  418.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  419.      *params = CC.Light.Model.LocalViewer;
  420.      break;
  421.       case GL_LIGHT_MODEL_TWO_SIDE:
  422.      *params = CC.Light.Model.TwoSide;
  423.      break;
  424.       case GL_LINE_SMOOTH:
  425.      *params = CC.Line.SmoothFlag;
  426.      break;
  427.       case GL_LINE_SMOOTH_HINT:
  428.      *params = ENUM_TO_BOOL(CC.Hint.LineSmooth);
  429.      break;
  430.       case GL_LINE_STIPPLE:
  431.      *params = CC.Line.StippleFlag;
  432.      break;
  433.       case GL_LINE_STIPPLE_PATTERN:
  434.      *params = INT_TO_BOOL(CC.Line.StipplePattern);
  435.      break;
  436.       case GL_LINE_STIPPLE_REPEAT:
  437.      *params = INT_TO_BOOL(CC.Line.StippleFactor);
  438.      break;
  439.       case GL_LINE_WIDTH:
  440.      *params = FLOAT_TO_BOOL(CC.Line.Width);
  441.      break;
  442.       case GL_LINE_WIDTH_GRANULARITY:
  443.      *params = FLOAT_TO_BOOL(LINE_WIDTH_GRANULARITY);
  444.      break;
  445.       case GL_LINE_WIDTH_RANGE:
  446.      params[0] = FLOAT_TO_BOOL(MIN_LINE_WIDTH);
  447.      params[1] = FLOAT_TO_BOOL(MAX_LINE_WIDTH);
  448.      break;
  449.       case GL_LIST_BASE:
  450.      *params = INT_TO_BOOL(CC.List.ListBase);
  451.      break;
  452.       case GL_LIST_INDEX:
  453.      *params = INT_TO_BOOL( gl_list_index() );
  454.      break;
  455.       case GL_LIST_MODE:
  456.      *params = ENUM_TO_BOOL( CC.ExecuteFlag
  457.                   ? GL_COMPILE_AND_EXECUTE : GL_COMPILE );
  458.      break;
  459.       case GL_LOGIC_OP:
  460.      *params = CC.Color.LogicOpEnabled;
  461.      break;
  462.       case GL_LOGIC_OP_MODE:
  463.      *params = ENUM_TO_BOOL(CC.Color.LogicOp);
  464.      break;
  465.       case GL_MAP1_COLOR_4:
  466.      *params = CC.Eval.Map1Color4;
  467.      break;
  468.       case GL_MAP1_GRID_DOMAIN:
  469.      params[0] = FLOAT_TO_BOOL(CC.Eval.MapGrid1u1);
  470.      params[1] = FLOAT_TO_BOOL(CC.Eval.MapGrid1u2);
  471.      break;
  472.       case GL_MAP1_GRID_SEGMENTS:
  473.      *params = INT_TO_BOOL(CC.Eval.MapGrid1un);
  474.      break;
  475.       case GL_MAP1_INDEX:
  476.      *params = CC.Eval.Map1Index;
  477.      break;
  478.       case GL_MAP1_NORMAL:
  479.      *params = CC.Eval.Map1Normal;
  480.      break;
  481.       case GL_MAP1_TEXTURE_COORD_1:
  482.      *params = CC.Eval.Map1TextureCoord1;
  483.      break;
  484.       case GL_MAP1_TEXTURE_COORD_2:
  485.      *params = CC.Eval.Map1TextureCoord2;
  486.      break;
  487.       case GL_MAP1_TEXTURE_COORD_3:
  488.      *params = CC.Eval.Map1TextureCoord3;
  489.      break;
  490.       case GL_MAP1_TEXTURE_COORD_4:
  491.      *params = CC.Eval.Map1TextureCoord4;
  492.      break;
  493.       case GL_MAP1_VERTEX_3:
  494.      *params = CC.Eval.Map1Vertex3;
  495.      break;
  496.       case GL_MAP1_VERTEX_4:
  497.      *params = CC.Eval.Map1Vertex4;
  498.      break;
  499.       case GL_MAP2_COLOR_4:
  500.      *params = CC.Eval.Map2Color4;
  501.      break;
  502.       case GL_MAP2_GRID_DOMAIN:
  503.      params[0] = FLOAT_TO_BOOL(CC.Eval.MapGrid2u1);
  504.      params[1] = FLOAT_TO_BOOL(CC.Eval.MapGrid2u2);
  505.      params[2] = FLOAT_TO_BOOL(CC.Eval.MapGrid2v1);
  506.      params[3] = FLOAT_TO_BOOL(CC.Eval.MapGrid2v2);
  507.      break;
  508.       case GL_MAP2_GRID_SEGMENTS:
  509.      params[0] = INT_TO_BOOL(CC.Eval.MapGrid2un);
  510.      params[1] = INT_TO_BOOL(CC.Eval.MapGrid2vn);
  511.      break;
  512.       case GL_MAP2_INDEX:
  513.      *params = CC.Eval.Map2Index;
  514.      break;
  515.       case GL_MAP2_NORMAL:
  516.      *params = CC.Eval.Map2Normal;
  517.      break;
  518.       case GL_MAP2_TEXTURE_COORD_1:
  519.      *params = CC.Eval.Map2TextureCoord1;
  520.      break;
  521.       case GL_MAP2_TEXTURE_COORD_2:
  522.      *params = CC.Eval.Map2TextureCoord2;
  523.      break;
  524.       case GL_MAP2_TEXTURE_COORD_3:
  525.      *params = CC.Eval.Map2TextureCoord3;
  526.      break;
  527.       case GL_MAP2_TEXTURE_COORD_4:
  528.      *params = CC.Eval.Map2TextureCoord4;
  529.      break;
  530.       case GL_MAP2_VERTEX_3:
  531.      *params = CC.Eval.Map2Vertex3;
  532.      break;
  533.       case GL_MAP2_VERTEX_4:
  534.      *params = CC.Eval.Map2Vertex4;
  535.      break;
  536.       case GL_MAP_COLOR:
  537.      *params = CC.Pixel.MapColorFlag;
  538.      break;
  539.       case GL_MAP_STENCIL:
  540.      *params = CC.Pixel.MapStencilFlag;
  541.      break;
  542.       case GL_MATRIX_MODE:
  543.      *params = ENUM_TO_BOOL( CC.Transform.MatrixMode );
  544.      break;
  545.       case GL_MAX_ATTRIB_STACK_DEPTH:
  546.      *params = INT_TO_BOOL(MAX_ATTRIB_STACK_DEPTH);
  547.      break;
  548.       case GL_MAX_CLIP_PLANES:
  549.      *params = INT_TO_BOOL(MAX_CLIP_PLANES);
  550.      break;
  551.       case GL_MAX_EVAL_ORDER:
  552.      *params = INT_TO_BOOL(MAX_EVAL_ORDER);
  553.      break;
  554.       case GL_MAX_LIGHTS:
  555.      *params = INT_TO_BOOL(MAX_LIGHTS);
  556.      break;
  557.       case GL_MAX_LIST_NESTING:
  558.      *params = INT_TO_BOOL(MAX_LIST_NESTING);
  559.      break;
  560.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  561.      *params = INT_TO_BOOL(MAX_MODELVIEW_STACK_DEPTH);
  562.      break;
  563.       case GL_MAX_NAME_STACK_DEPTH:
  564.      *params = INT_TO_BOOL(MAX_NAME_STACK_DEPTH);
  565.      break;
  566.       case GL_MAX_PIXEL_MAP_TABLE:
  567.      *params = INT_TO_BOOL(MAX_PIXEL_MAP_TABLE);
  568.      break;
  569.       case GL_MAX_PROJECTION_STACK_DEPTH:
  570.      *params = INT_TO_BOOL(MAX_PROJECTION_STACK_DEPTH);
  571.      break;
  572.       case GL_MAX_TEXTURE_SIZE:
  573.      *params = INT_TO_BOOL(MAX_TEXTURE_SIZE);
  574.      break;
  575.       case GL_MAX_TEXTURE_STACK_DEPTH:
  576.      *params = INT_TO_BOOL(MAX_TEXTURE_STACK_DEPTH);
  577.      break;
  578.       case GL_MAX_VIEWPORT_DIMS:
  579.      params[0] = INT_TO_BOOL(MAX_WIDTH);
  580.      params[1] = INT_TO_BOOL(MAX_HEIGHT);
  581.      break;
  582.       case GL_MODELVIEW_MATRIX:
  583.      for (i=0;i<16;i++) {
  584.         params[i] = FLOAT_TO_BOOL(CC.ModelViewMatrix[i]);
  585.      }
  586.      break;
  587.       case GL_MODELVIEW_STACK_DEPTH:
  588.      *params = INT_TO_BOOL(CC.ModelViewStackDepth);
  589.      break;
  590.       case GL_NAME_STACK_DEPTH:
  591.      *params = INT_TO_BOOL(CC.NameStackDepth);
  592.      break;
  593.       case GL_NORMALIZE:
  594.      *params = CC.Transform.Normalize;
  595.      break;
  596.       case GL_PACK_ALIGNMENT:
  597.      *params = INT_TO_BOOL(CC.PackAlignment);
  598.      break;
  599.       case GL_PACK_LSB_FIRST:
  600.      *params = CC.PackLSBFirst;
  601.      break;
  602.       case GL_PACK_ROW_LENGTH:
  603.      *params = INT_TO_BOOL(CC.PackRowLength);
  604.      break;
  605.       case GL_PACK_SKIP_PIXELS:
  606.      *params = INT_TO_BOOL(CC.PackSkipPixels);
  607.      break;
  608.       case GL_PACK_SKIP_ROWS:
  609.      *params = INT_TO_BOOL(CC.PackSkipRows);
  610.      break;
  611.       case GL_PACK_SWAP_BYTES:
  612.      *params = CC.PackSwapBytes;
  613.      break;
  614.       case GL_PERSPECTIVE_CORRECTION_HINT:
  615.      *params = ENUM_TO_BOOL(CC.Hint.PerspectiveCorrection);
  616.      break;
  617.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  618.      *params = INT_TO_BOOL(CC.Pixel.MapAtoAsize);
  619.      break;
  620.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  621.      *params = INT_TO_BOOL(CC.Pixel.MapBtoBsize);
  622.      break;
  623.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  624.      *params = INT_TO_BOOL(CC.Pixel.MapGtoGsize);
  625.      break;
  626.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  627.      *params = INT_TO_BOOL(CC.Pixel.MapItoAsize);
  628.      break;
  629.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  630.      *params = INT_TO_BOOL(CC.Pixel.MapItoBsize);
  631.      break;
  632.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  633.      *params = INT_TO_BOOL(CC.Pixel.MapItoGsize);
  634.      break;
  635.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  636.      *params = INT_TO_BOOL(CC.Pixel.MapItoIsize);
  637.      break;
  638.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  639.      *params = INT_TO_BOOL(CC.Pixel.MapItoRsize);
  640.      break;
  641.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  642.      *params = INT_TO_BOOL(CC.Pixel.MapRtoRsize);
  643.      break;
  644.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  645.      *params = INT_TO_BOOL(CC.Pixel.MapStoSsize);
  646.      break;
  647.       case GL_POINT_SIZE:
  648.      *params = FLOAT_TO_BOOL(CC.Point.Size );
  649.      break;
  650.       case GL_POINT_SIZE_GRANULARITY:
  651.      *params = FLOAT_TO_BOOL(POINT_SIZE_GRANULARITY );
  652.      break;
  653.       case GL_POINT_SIZE_RANGE:
  654.      params[0] = FLOAT_TO_BOOL(MIN_POINT_SIZE );
  655.      params[1] = FLOAT_TO_BOOL(MAX_POINT_SIZE );
  656.      break;
  657.       case GL_POINT_SMOOTH:
  658.      *params = CC.Point.SmoothFlag;
  659.      break;
  660.       case GL_POINT_SMOOTH_HINT:
  661.      *params = ENUM_TO_BOOL(CC.Hint.PointSmooth);
  662.      break;
  663.       case GL_POLYGON_MODE:
  664.      params[0] = ENUM_TO_BOOL(CC.Polygon.FrontMode);
  665.      params[1] = ENUM_TO_BOOL(CC.Polygon.BackMode);
  666.      break;
  667.       case GL_POLYGON_OFFSET_BIAS_EXT:
  668.          *params = FLOAT_TO_BOOL( CC.Polygon.OffsetBias );
  669.          break;
  670.       case GL_POLYGON_OFFSET_FACTOR_EXT:
  671.          *params = FLOAT_TO_BOOL( CC.Polygon.OffsetFactor );
  672.          break;
  673.       case GL_POLYGON_SMOOTH:
  674.      *params = CC.Polygon.SmoothFlag;
  675.      break;
  676.       case GL_POLYGON_SMOOTH_HINT:
  677.      *params = ENUM_TO_BOOL(CC.Hint.PolygonSmooth);
  678.      break;
  679.       case GL_POLYGON_STIPPLE:
  680.      *params = CC.Polygon.StippleFlag;
  681.      break;
  682.       case GL_PROJECTION_MATRIX:
  683.      for (i=0;i<16;i++) {
  684.         params[i] = FLOAT_TO_BOOL(CC.ProjectionMatrix[i]);
  685.      }
  686.      break;
  687.       case GL_PROJECTION_STACK_DEPTH:
  688.      *params = INT_TO_BOOL(CC.ProjectionStackDepth);
  689.      break;
  690.       case GL_READ_BUFFER:
  691.      *params = ENUM_TO_BOOL(CC.Pixel.ReadBuffer);
  692.      break;
  693.       case GL_RED_BIAS:
  694.          *params = FLOAT_TO_BOOL(CC.Pixel.RedBias);
  695.      break;
  696.       case GL_RED_BITS:
  697.          *params = INT_TO_BOOL( bits( CC.RedScale ) );
  698.      break;
  699.       case GL_RED_SCALE:
  700.          *params = FLOAT_TO_BOOL(CC.Pixel.RedScale);
  701.      break;
  702.       case GL_RENDER_MODE:
  703.      *params = ENUM_TO_BOOL(CC.RenderMode);
  704.      break;
  705.       case GL_RGBA_MODE:
  706.          *params = CC.RGBAflag;
  707.      break;
  708.       case GL_SCISSOR_BOX:
  709.      params[0] = INT_TO_BOOL(CC.Scissor.X);
  710.      params[1] = INT_TO_BOOL(CC.Scissor.Y);
  711.      params[2] = INT_TO_BOOL(CC.Scissor.Width);
  712.      params[3] = INT_TO_BOOL(CC.Scissor.Height);
  713.      break;
  714.       case GL_SCISSOR_TEST:
  715.      *params = CC.Scissor.Enabled;
  716.      break;
  717.       case GL_SHADE_MODEL:
  718.      *params = ENUM_TO_BOOL(CC.Light.ShadeModel);
  719.      break;
  720.       case GL_STENCIL_BITS:
  721.      *params = INT_TO_BOOL(8*sizeof(GLstencil));
  722.      break;
  723.       case GL_STENCIL_CLEAR_VALUE:
  724.      *params = INT_TO_BOOL(CC.Stencil.Clear);
  725.      break;
  726.       case GL_STENCIL_FAIL:
  727.      *params = ENUM_TO_BOOL(CC.Stencil.FailFunc);
  728.      break;
  729.       case GL_STENCIL_FUNC:
  730.      *params = ENUM_TO_BOOL(CC.Stencil.Function);
  731.      break;
  732.       case GL_STENCIL_PASS_DEPTH_FAIL:
  733.      *params = ENUM_TO_BOOL(CC.Stencil.ZFailFunc);
  734.      break;
  735.       case GL_STENCIL_PASS_DEPTH_PASS:
  736.      *params = ENUM_TO_BOOL(CC.Stencil.ZPassFunc);
  737.      break;
  738.       case GL_STENCIL_REF:
  739.      *params = INT_TO_BOOL(CC.Stencil.Ref);
  740.      break;
  741.       case GL_STENCIL_TEST:
  742.      *params = CC.Stencil.Enabled;
  743.      break;
  744.       case GL_STENCIL_VALUE_MASK:
  745.      *params = INT_TO_BOOL(CC.Stencil.ValueMask);
  746.      break;
  747.       case GL_STENCIL_WRITEMASK:
  748.      *params = INT_TO_BOOL(CC.Stencil.WriteMask);
  749.      break;
  750.       case GL_STEREO:
  751.      *params = GL_FALSE;    /* TODO */
  752.      break;
  753.       case GL_SUBPIXEL_BITS:
  754.      *params = INT_TO_BOOL(0);  /* TODO */
  755.      break;
  756.       case GL_TEXTURE_1D:
  757.      *params = (CC.Texture.Enabled & 1) ? GL_TRUE : GL_FALSE;
  758.      break;
  759.       case GL_TEXTURE_2D:
  760.      *params = (CC.Texture.Enabled & 2) ? GL_TRUE : GL_FALSE;
  761.      break;
  762.       case GL_TEXTURE_ENV_COLOR:
  763.      params[0] = FLOAT_TO_BOOL(CC.Texture.EnvColor[0]);
  764.      params[1] = FLOAT_TO_BOOL(CC.Texture.EnvColor[1]);
  765.      params[2] = FLOAT_TO_BOOL(CC.Texture.EnvColor[2]);
  766.      params[3] = FLOAT_TO_BOOL(CC.Texture.EnvColor[3]);
  767.      break;
  768.       case GL_TEXTURE_ENV_MODE:
  769.      *params = ENUM_TO_BOOL(CC.Texture.EnvMode);
  770.      break;
  771.       case GL_TEXTURE_GEN_S:
  772.      *params = (CC.Texture.TexGenEnabled & S_BIT) ? GL_TRUE : GL_FALSE;
  773.      break;
  774.       case GL_TEXTURE_GEN_T:
  775.      *params = (CC.Texture.TexGenEnabled & T_BIT) ? GL_TRUE : GL_FALSE;
  776.      break;
  777.       case GL_TEXTURE_GEN_R:
  778.      *params = (CC.Texture.TexGenEnabled & R_BIT) ? GL_TRUE : GL_FALSE;
  779.      break;
  780.       case GL_TEXTURE_GEN_Q:
  781.      *params = (CC.Texture.TexGenEnabled & Q_BIT) ? GL_TRUE : GL_FALSE;
  782.      break;
  783.       case GL_TEXTURE_MATRIX:
  784.      for (i=0;i<16;i++) {
  785.         params[i] = FLOAT_TO_BOOL(CC.TextureMatrix[i]);
  786.      }
  787.      break;
  788.       case GL_TEXTURE_STACK_DEPTH:
  789.      *params = INT_TO_BOOL(CC.TextureStackDepth);
  790.      break;
  791.       case GL_UNPACK_ALIGNMENT:
  792.      *params = INT_TO_BOOL(CC.UnpackAlignment);
  793.      break;
  794.       case GL_UNPACK_LSB_FIRST:
  795.      *params = CC.UnpackLSBFirst;
  796.      break;
  797.       case GL_UNPACK_ROW_LENGTH:
  798.      *params = INT_TO_BOOL(CC.UnpackRowLength);
  799.      break;
  800.       case GL_UNPACK_SKIP_PIXELS:
  801.      *params = INT_TO_BOOL(CC.UnpackSkipPixels);
  802.      break;
  803.       case GL_UNPACK_SKIP_ROWS:
  804.      *params = INT_TO_BOOL(CC.UnpackSkipRows);
  805.      break;
  806.       case GL_UNPACK_SWAP_BYTES:
  807.      *params = CC.UnpackSwapBytes;
  808.      break;
  809.       case GL_VIEWPORT:
  810.      params[0] = INT_TO_BOOL(CC.Viewport.X);
  811.      params[1] = INT_TO_BOOL(CC.Viewport.Y);
  812.      params[2] = INT_TO_BOOL(CC.Viewport.Width);
  813.      params[3] = INT_TO_BOOL(CC.Viewport.Height);
  814.      break;
  815.       case GL_ZOOM_X:
  816.      *params = FLOAT_TO_BOOL(CC.Pixel.ZoomX);
  817.      break;
  818.       case GL_ZOOM_Y:
  819.      *params = FLOAT_TO_BOOL(CC.Pixel.ZoomY);
  820.      break;
  821.       case GL_VERTEX_ARRAY_SIZE_EXT:
  822.          *params = INT_TO_BOOL(CC.Array.VertexSize);
  823.          break;
  824.       case GL_VERTEX_ARRAY_TYPE_EXT:
  825.          *params = ENUM_TO_BOOL(CC.Array.VertexType);
  826.          break;
  827.       case GL_VERTEX_ARRAY_STRIDE_EXT:
  828.          *params = INT_TO_BOOL(CC.Array.VertexStride);
  829.          break;
  830.       case GL_VERTEX_ARRAY_COUNT_EXT:
  831.          *params = INT_TO_BOOL(CC.Array.VertexCount);
  832.          break;
  833.       case GL_NORMAL_ARRAY_TYPE_EXT:
  834.          *params = ENUM_TO_BOOL(CC.Array.NormalType);
  835.          break;
  836.       case GL_NORMAL_ARRAY_STRIDE_EXT:
  837.          *params = INT_TO_BOOL(CC.Array.NormalStride);
  838.          break;
  839.       case GL_NORMAL_ARRAY_COUNT_EXT:
  840.          *params = INT_TO_BOOL(CC.Array.NormalCount);
  841.          break;
  842.       case GL_COLOR_ARRAY_SIZE_EXT:
  843.          *params = INT_TO_BOOL(CC.Array.ColorSize);
  844.          break;
  845.       case GL_COLOR_ARRAY_TYPE_EXT:
  846.          *params = ENUM_TO_BOOL(CC.Array.ColorType);
  847.          break;
  848.       case GL_COLOR_ARRAY_STRIDE_EXT:
  849.          *params = INT_TO_BOOL(CC.Array.ColorStride);
  850.          break;
  851.       case GL_COLOR_ARRAY_COUNT_EXT:
  852.          *params = INT_TO_BOOL(CC.Array.ColorCount);
  853.          break;
  854.       case GL_INDEX_ARRAY_TYPE_EXT:
  855.          *params = ENUM_TO_BOOL(CC.Array.IndexType);
  856.          break;
  857.       case GL_INDEX_ARRAY_STRIDE_EXT:
  858.          *params = INT_TO_BOOL(CC.Array.IndexStride);
  859.          break;
  860.       case GL_INDEX_ARRAY_COUNT_EXT:
  861.          *params = INT_TO_BOOL(CC.Array.IndexCount);
  862.          break;
  863.       case GL_TEXTURE_COORD_ARRAY_SIZE_EXT:
  864.          *params = INT_TO_BOOL(CC.Array.TexCoordSize);
  865.          break;
  866.       case GL_TEXTURE_COORD_ARRAY_TYPE_EXT:
  867.          *params = ENUM_TO_BOOL(CC.Array.TexCoordType);
  868.          break;
  869.       case GL_TEXTURE_COORD_ARRAY_STRIDE_EXT:
  870.          *params = INT_TO_BOOL(CC.Array.TexCoordStride);
  871.          break;
  872.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  873.          *params = INT_TO_BOOL(CC.Array.TexCoordCount);
  874.          break;
  875.       case GL_EDGE_FLAG_ARRAY_STRIDE_EXT:
  876.          *params = INT_TO_BOOL(CC.Array.EdgeFlagStride);
  877.          break;
  878.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  879.          *params = INT_TO_BOOL(CC.Array.EdgeFlagCount);
  880.          break;
  881.  
  882.       default:
  883.          gl_error( GL_INVALID_ENUM, "glGetBooleanv" );
  884.    }
  885. }
  886.  
  887.  
  888.  
  889.  
  890. void glGetDoublev( GLenum pname, GLdouble *params )
  891. {
  892.    GLuint i;
  893.  
  894.    if (INSIDE_BEGIN_END) {
  895.       gl_error( GL_INVALID_OPERATION, "glGetDoublev" );
  896.       return;
  897.    }
  898.  
  899.    switch (pname) {
  900.       case GL_ACCUM_RED_BITS:
  901.       case GL_ACCUM_GREEN_BITS:
  902.       case GL_ACCUM_BLUE_BITS:
  903.       case GL_ACCUM_ALPHA_BITS:
  904.          *params = (GLdouble) (sizeof(GLaccum)*8);
  905.          break;
  906.       case GL_ACCUM_CLEAR_VALUE:
  907.          params[0] = (GLdouble) CC.Accum.ClearColor[0];
  908.          params[1] = (GLdouble) CC.Accum.ClearColor[1];
  909.          params[2] = (GLdouble) CC.Accum.ClearColor[2];
  910.          params[3] = (GLdouble) CC.Accum.ClearColor[3];
  911.          break;
  912.       case GL_ALPHA_BIAS:
  913.          *params = (GLdouble) CC.Pixel.AlphaBias;
  914.          break;
  915.       case GL_ALPHA_BITS:
  916.          if (CC.FrontAlphaEnabled || CC.BackAlphaEnabled) {
  917.             *params = 8*sizeof(GLubyte);
  918.          }
  919.          else {
  920.             *params = 0.0;
  921.          }
  922.          break;
  923.       case GL_ALPHA_SCALE:
  924.          *params = (GLdouble) CC.Pixel.AlphaScale;
  925.          break;
  926.       case GL_ALPHA_TEST:
  927.          *params = (GLdouble) CC.Color.AlphaEnabled;
  928.          break;
  929.       case GL_ALPHA_TEST_FUNC:
  930.          *params = (GLdouble) CC.Color.AlphaFunc;
  931.          break;
  932.       case GL_ALPHA_TEST_REF:
  933.          *params = (GLdouble) CC.Color.AlphaRef;
  934.          break;
  935.       case GL_ATTRIB_STACK_DEPTH:
  936.          *params = (GLdouble ) CC.AttribStackDepth;
  937.          break;
  938.       case GL_AUTO_NORMAL:
  939.          *params = (GLdouble) CC.Eval.AutoNormal;
  940.          break;
  941.       case GL_AUX_BUFFERS:
  942.          *params = (GLdouble) NUM_AUX_BUFFERS;
  943.          break;
  944.       case GL_BLEND:
  945.          *params = (GLdouble) CC.Color.BlendEnabled;
  946.          break;
  947.       case GL_BLEND_DST:
  948.          *params = (GLdouble) CC.Color.BlendDst;
  949.          break;
  950.       case GL_BLEND_SRC:
  951.          *params = (GLdouble) CC.Color.BlendSrc;
  952.          break;
  953.       case GL_BLEND_EQUATION_EXT:
  954.      *params = (GLdouble) CC.Color.BlendEquation;
  955.      break;
  956.       case GL_BLEND_COLOR_EXT:
  957.      params[0] = (GLdouble) CC.Color.BlendColor[0];
  958.      params[1] = (GLdouble) CC.Color.BlendColor[1];
  959.      params[2] = (GLdouble) CC.Color.BlendColor[2];
  960.      params[3] = (GLdouble) CC.Color.BlendColor[3];
  961.      break;
  962.       case GL_BLUE_BIAS:
  963.          *params = (GLdouble) CC.Pixel.BlueBias;
  964.          break;
  965.       case GL_BLUE_BITS:
  966.          *params = (GLdouble) bits( CC.BlueScale );
  967.          break;
  968.       case GL_BLUE_SCALE:
  969.          *params = (GLdouble) CC.Pixel.BlueScale;
  970.          break;
  971.       case GL_CLIP_PLANE0:
  972.       case GL_CLIP_PLANE1:
  973.       case GL_CLIP_PLANE2:
  974.       case GL_CLIP_PLANE3:
  975.       case GL_CLIP_PLANE4:
  976.       case GL_CLIP_PLANE5:
  977.          *params = (GLdouble) CC.Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  978.          break;
  979.       case GL_COLOR_CLEAR_VALUE:
  980.          params[0] = (GLdouble) CC.Color.ClearColor[0];
  981.          params[1] = (GLdouble) CC.Color.ClearColor[1];
  982.          params[2] = (GLdouble) CC.Color.ClearColor[2];
  983.          params[3] = (GLdouble) CC.Color.ClearColor[3];
  984.          break;
  985.       case GL_COLOR_MATERIAL:
  986.          *params = (GLdouble) CC.Light.ColorMaterialEnabled;
  987.          break;
  988.       case GL_COLOR_MATERIAL_FACE:
  989.          *params = (GLdouble) CC.Light.ColorMaterialFace;
  990.          break;
  991.       case GL_COLOR_MATERIAL_PARAMETER:
  992.          *params = (GLdouble) CC.Light.ColorMaterialMode;
  993.          break;
  994.       case GL_COLOR_WRITEMASK:
  995.          params[0] = (CC.Color.ColorMask & 8) ? 1.0 : 0.0;
  996.          params[1] = (CC.Color.ColorMask & 4) ? 1.0 : 0.0;
  997.          params[2] = (CC.Color.ColorMask & 2) ? 1.0 : 0.0;
  998.          params[3] = (CC.Color.ColorMask & 1) ? 1.0 : 0.0;
  999.          break;
  1000.       case GL_CULL_FACE:
  1001.          *params = (GLdouble) CC.Polygon.CullFlag;
  1002.          break;
  1003.       case GL_CULL_FACE_MODE:
  1004.          *params = (GLdouble) CC.Polygon.CullFaceMode;
  1005.          break;
  1006.       case GL_CURRENT_COLOR:
  1007.          params[0] = (GLdouble) CC.Current.IntColor[0] / CC.RedScale;
  1008.          params[1] = (GLdouble) CC.Current.IntColor[1] / CC.GreenScale;
  1009.          params[2] = (GLdouble) CC.Current.IntColor[2] / CC.BlueScale;
  1010.          params[3] = (GLdouble) CC.Current.IntColor[3] / CC.AlphaScale;
  1011.          break;
  1012.       case GL_CURRENT_INDEX:
  1013.          *params = (GLdouble) CC.Current.Index;
  1014.          break;
  1015.       case GL_CURRENT_NORMAL:
  1016.          params[0] = (GLdouble) CC.Current.Normal[0];
  1017.          params[1] = (GLdouble) CC.Current.Normal[1];
  1018.          params[2] = (GLdouble) CC.Current.Normal[2];
  1019.          break;
  1020.       case GL_CURRENT_RASTER_COLOR:
  1021.      params[0] = (GLdouble) CC.Current.RasterColor[0];
  1022.      params[1] = (GLdouble) CC.Current.RasterColor[1];
  1023.      params[2] = (GLdouble) CC.Current.RasterColor[2];
  1024.      params[3] = (GLdouble) CC.Current.RasterColor[3];
  1025.      break;
  1026.       case GL_CURRENT_RASTER_DISTANCE:
  1027.      params[0] = (GLdouble) CC.Current.RasterDistance;
  1028.      break;
  1029.       case GL_CURRENT_RASTER_INDEX:
  1030.      *params = (GLdouble) CC.Current.RasterIndex;
  1031.      break;
  1032.       case GL_CURRENT_RASTER_POSITION:
  1033.      params[0] = (GLdouble) CC.Current.RasterPos[0];
  1034.      params[1] = (GLdouble) CC.Current.RasterPos[1];
  1035.      params[2] = (GLdouble) CC.Current.RasterPos[2];
  1036.      params[3] = (GLdouble) CC.Current.RasterPos[3];
  1037.      break;
  1038.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1039.      params[0] = (GLdouble) CC.Current.RasterTexCoord[0];
  1040.      params[1] = (GLdouble) CC.Current.RasterTexCoord[1];
  1041.      params[2] = (GLdouble) CC.Current.RasterTexCoord[2];
  1042.      params[3] = (GLdouble) CC.Current.RasterTexCoord[3];
  1043.      break;
  1044.       case GL_CURRENT_RASTER_POSITION_VALID:
  1045.      *params = (GLdouble) CC.Current.RasterPosValid;
  1046.      break;
  1047.       case GL_CURRENT_TEXTURE_COORDS:
  1048.      params[0] = (GLdouble) CC.Current.TexCoord[0];
  1049.      params[1] = (GLdouble) CC.Current.TexCoord[1];
  1050.      params[2] = (GLdouble) CC.Current.TexCoord[2];
  1051.      params[3] = (GLdouble) CC.Current.TexCoord[3];
  1052.      break;
  1053.       case GL_DEPTH_BIAS:
  1054.      *params = (GLdouble) CC.Pixel.DepthBias;
  1055.      break;
  1056.       case GL_DEPTH_BITS:
  1057.      *params = (GLdouble) (8*sizeof(GLdepth));
  1058.      break;
  1059.       case GL_DEPTH_CLEAR_VALUE:
  1060.      *params = (GLdouble) CC.Depth.Clear;
  1061.      break;
  1062.       case GL_DEPTH_FUNC:
  1063.      *params = (GLdouble) CC.Depth.Func;
  1064.      break;
  1065.       case GL_DEPTH_RANGE:
  1066.          params[0] = (GLdouble) CC.Viewport.Near;
  1067.          params[1] = (GLdouble) CC.Viewport.Far;
  1068.      break;
  1069.       case GL_DEPTH_SCALE:
  1070.      *params = (GLdouble) CC.Pixel.DepthScale;
  1071.      break;
  1072.       case GL_DEPTH_TEST:
  1073.      *params = (GLdouble) CC.Depth.Test;
  1074.      break;
  1075.       case GL_DEPTH_WRITEMASK:
  1076.      *params = (GLdouble) CC.Depth.Mask;
  1077.      break;
  1078.       case GL_DITHER:
  1079.      *params = (GLdouble) CC.Color.DitherFlag;
  1080.      break;
  1081.       case GL_DOUBLEBUFFER:
  1082.      *params = (GLdouble) CC.DBflag;
  1083.      break;
  1084.       case GL_DRAW_BUFFER:
  1085.      *params = (GLdouble) CC.Color.DrawBuffer;
  1086.      break;
  1087.       case GL_EDGE_FLAG:
  1088.      *params = (GLdouble) CC.Current.EdgeFlag;
  1089.      break;
  1090.       case GL_FOG:
  1091.      *params = (GLdouble) CC.Fog.Enabled;
  1092.      break;
  1093.       case GL_FOG_COLOR:
  1094.      params[0] = (GLdouble) CC.Fog.Color[0];
  1095.      params[1] = (GLdouble) CC.Fog.Color[1];
  1096.      params[2] = (GLdouble) CC.Fog.Color[2];
  1097.      params[3] = (GLdouble) CC.Fog.Color[3];
  1098.      break;
  1099.       case GL_FOG_DENSITY:
  1100.      *params = (GLdouble) CC.Fog.Density;
  1101.      break;
  1102.       case GL_FOG_END:
  1103.      *params = (GLdouble) CC.Fog.End;
  1104.      break;
  1105.       case GL_FOG_HINT:
  1106.      *params = (GLdouble) CC.Hint.Fog;
  1107.      break;
  1108.       case GL_FOG_INDEX:
  1109.      *params = (GLdouble) CC.Fog.Index;
  1110.      break;
  1111.       case GL_FOG_MODE:
  1112.      *params = (GLdouble) CC.Fog.Mode;
  1113.      break;
  1114.       case GL_FOG_START:
  1115.      *params = (GLdouble) CC.Fog.Start;
  1116.      break;
  1117.       case GL_FRONT_FACE:
  1118.      *params = (GLdouble) CC.Polygon.FrontFace;
  1119.      break;
  1120.       case GL_GREEN_BIAS:
  1121.          *params = (GLdouble) CC.Pixel.GreenBias;
  1122.          break;
  1123.       case GL_GREEN_BITS:
  1124.          *params = (GLdouble) bits( CC.GreenScale );
  1125.          break;
  1126.       case GL_GREEN_SCALE:
  1127.          *params = (GLdouble) CC.Pixel.GreenScale;
  1128.          break;
  1129.       case GL_INDEX_BITS:
  1130.      {
  1131.         GLuint width, height, depth;
  1132.         (*DD.buffer_size)( &width, &height, &depth );
  1133.         *params = (GLdouble) depth;
  1134.      }
  1135.      break;
  1136.       case GL_INDEX_CLEAR_VALUE:
  1137.          *params = (GLdouble) CC.Color.ClearIndex;
  1138.      break;
  1139.       case GL_INDEX_MODE:
  1140.      *params = CC.RGBAflag ? 0.0 : 1.0;
  1141.      break;
  1142.       case GL_INDEX_OFFSET:
  1143.      *params = (GLdouble) CC.Pixel.IndexOffset;
  1144.      break;
  1145.       case GL_INDEX_SHIFT:
  1146.      *params = (GLdouble) CC.Pixel.IndexShift;
  1147.      break;
  1148.       case GL_INDEX_WRITEMASK:
  1149.      *params = (GLdouble) CC.Color.IndexMask;
  1150.      break;
  1151.       case GL_LIGHT0:
  1152.       case GL_LIGHT1:
  1153.       case GL_LIGHT2:
  1154.       case GL_LIGHT3:
  1155.       case GL_LIGHT4:
  1156.       case GL_LIGHT5:
  1157.       case GL_LIGHT6:
  1158.       case GL_LIGHT7:
  1159.      *params = (GLdouble) CC.Light.Light[pname-GL_LIGHT0].Enabled;
  1160.      break;
  1161.       case GL_LIGHTING:
  1162.      *params = (GLdouble) CC.Light.Enabled;
  1163.      break;
  1164.       case GL_LIGHT_MODEL_AMBIENT:
  1165.      params[0] = (GLdouble) CC.Light.Model.Ambient[0];
  1166.      params[1] = (GLdouble) CC.Light.Model.Ambient[1];
  1167.      params[2] = (GLdouble) CC.Light.Model.Ambient[2];
  1168.      params[3] = (GLdouble) CC.Light.Model.Ambient[3];
  1169.      break;
  1170.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1171.      *params = (GLdouble) CC.Light.Model.LocalViewer;
  1172.      break;
  1173.       case GL_LIGHT_MODEL_TWO_SIDE:
  1174.      *params = (GLdouble) CC.Light.Model.TwoSide;
  1175.      break;
  1176.       case GL_LINE_SMOOTH:
  1177.      *params = (GLdouble) CC.Line.SmoothFlag;
  1178.      break;
  1179.       case GL_LINE_SMOOTH_HINT:
  1180.      *params = (GLdouble) CC.Hint.LineSmooth;
  1181.      break;
  1182.       case GL_LINE_STIPPLE:
  1183.      *params = (GLdouble) CC.Line.StippleFlag;
  1184.      break;
  1185.       case GL_LINE_STIPPLE_PATTERN:
  1186.          *params = (GLdouble) CC.Line.StipplePattern;
  1187.          break;
  1188.       case GL_LINE_STIPPLE_REPEAT:
  1189.          *params = (GLdouble) CC.Line.StippleFactor;
  1190.          break;
  1191.       case GL_LINE_WIDTH:
  1192.      *params = (GLdouble) CC.Line.Width;
  1193.      break;
  1194.       case GL_LINE_WIDTH_GRANULARITY:
  1195.      *params = (GLdouble) LINE_WIDTH_GRANULARITY;
  1196.      break;
  1197.       case GL_LINE_WIDTH_RANGE:
  1198.      params[0] = (GLdouble) MIN_LINE_WIDTH;
  1199.      params[1] = (GLdouble) MAX_LINE_WIDTH;
  1200.      break;
  1201.       case GL_LIST_BASE:
  1202.      *params = (GLdouble) CC.List.ListBase;
  1203.      break;
  1204.       case GL_LIST_INDEX:
  1205.      *params = (GLdouble) gl_list_index();
  1206.      break;
  1207.       case GL_LIST_MODE:
  1208.      *params = CC.ExecuteFlag ? (GLdouble) GL_COMPILE_AND_EXECUTE
  1209.                      : (GLdouble) GL_COMPILE;
  1210.      break;
  1211.       case GL_LOGIC_OP:
  1212.      *params = (GLdouble) CC.Color.LogicOpEnabled;
  1213.      break;
  1214.       case GL_LOGIC_OP_MODE:
  1215.          *params = (GLdouble) CC.Color.LogicOp;
  1216.      break;
  1217.       case GL_MAP1_COLOR_4:
  1218.      *params = (GLdouble) CC.Eval.Map1Color4;
  1219.      break;
  1220.       case GL_MAP1_GRID_DOMAIN:
  1221.      params[0] = (GLdouble) CC.Eval.MapGrid1u1;
  1222.      params[1] = (GLdouble) CC.Eval.MapGrid1u2;
  1223.      break;
  1224.       case GL_MAP1_GRID_SEGMENTS:
  1225.      *params = (GLdouble) CC.Eval.MapGrid1un;
  1226.      break;
  1227.       case GL_MAP1_INDEX:
  1228.      *params = (GLdouble) CC.Eval.Map1Index;
  1229.      break;
  1230.       case GL_MAP1_NORMAL:
  1231.      *params = (GLdouble) CC.Eval.Map1Normal;
  1232.      break;
  1233.       case GL_MAP1_TEXTURE_COORD_1:
  1234.      *params = (GLdouble) CC.Eval.Map1TextureCoord1;
  1235.      break;
  1236.       case GL_MAP1_TEXTURE_COORD_2:
  1237.      *params = (GLdouble) CC.Eval.Map1TextureCoord2;
  1238.      break;
  1239.       case GL_MAP1_TEXTURE_COORD_3:
  1240.      *params = (GLdouble) CC.Eval.Map1TextureCoord3;
  1241.      break;
  1242.       case GL_MAP1_TEXTURE_COORD_4:
  1243.      *params = (GLdouble) CC.Eval.Map1TextureCoord4;
  1244.      break;
  1245.       case GL_MAP1_VERTEX_3:
  1246.      *params = (GLdouble) CC.Eval.Map1Vertex3;
  1247.      break;
  1248.       case GL_MAP1_VERTEX_4:
  1249.      *params = (GLdouble) CC.Eval.Map1Vertex4;
  1250.      break;
  1251.       case GL_MAP2_COLOR_4:
  1252.      *params = (GLdouble) CC.Eval.Map2Color4;
  1253.      break;
  1254.       case GL_MAP2_GRID_DOMAIN:
  1255.      params[0] = (GLdouble) CC.Eval.MapGrid2u1;
  1256.      params[1] = (GLdouble) CC.Eval.MapGrid2u2;
  1257.      params[2] = (GLdouble) CC.Eval.MapGrid2v1;
  1258.      params[3] = (GLdouble) CC.Eval.MapGrid2v2;
  1259.      break;
  1260.       case GL_MAP2_GRID_SEGMENTS:
  1261.      params[0] = (GLdouble) CC.Eval.MapGrid2un;
  1262.      params[1] = (GLdouble) CC.Eval.MapGrid2vn;
  1263.      break;
  1264.       case GL_MAP2_INDEX:
  1265.      *params = (GLdouble) CC.Eval.Map2Index;
  1266.      break;
  1267.       case GL_MAP2_NORMAL:
  1268.      *params = (GLdouble) CC.Eval.Map2Normal;
  1269.      break;
  1270.       case GL_MAP2_TEXTURE_COORD_1:
  1271.      *params = (GLdouble) CC.Eval.Map2TextureCoord1;
  1272.      break;
  1273.       case GL_MAP2_TEXTURE_COORD_2:
  1274.      *params = (GLdouble) CC.Eval.Map2TextureCoord2;
  1275.      break;
  1276.       case GL_MAP2_TEXTURE_COORD_3:
  1277.      *params = (GLdouble) CC.Eval.Map2TextureCoord3;
  1278.      break;
  1279.       case GL_MAP2_TEXTURE_COORD_4:
  1280.      *params = (GLdouble) CC.Eval.Map2TextureCoord4;
  1281.      break;
  1282.       case GL_MAP2_VERTEX_3:
  1283.      *params = (GLdouble) CC.Eval.Map2Vertex3;
  1284.      break;
  1285.       case GL_MAP2_VERTEX_4:
  1286.      *params = (GLdouble) CC.Eval.Map2Vertex4;
  1287.      break;
  1288.       case GL_MAP_COLOR:
  1289.      *params = (GLdouble) CC.Pixel.MapColorFlag;
  1290.      break;
  1291.       case GL_MAP_STENCIL:
  1292.      *params = (GLdouble) CC.Pixel.MapStencilFlag;
  1293.      break;
  1294.       case GL_MATRIX_MODE:
  1295.      *params = (GLdouble) CC.Transform.MatrixMode;
  1296.      break;
  1297.       case GL_MAX_ATTRIB_STACK_DEPTH:
  1298.      *params = (GLdouble) MAX_ATTRIB_STACK_DEPTH;
  1299.      break;
  1300.       case GL_MAX_CLIP_PLANES:
  1301.      *params = (GLdouble) MAX_CLIP_PLANES;
  1302.      break;
  1303.       case GL_MAX_EVAL_ORDER:
  1304.      *params = (GLdouble) MAX_EVAL_ORDER;
  1305.      break;
  1306.       case GL_MAX_LIGHTS:
  1307.      *params = (GLdouble) MAX_LIGHTS;
  1308.      break;
  1309.       case GL_MAX_LIST_NESTING:
  1310.      *params = (GLdouble) MAX_LIST_NESTING;
  1311.      break;
  1312.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  1313.      *params = (GLdouble) MAX_MODELVIEW_STACK_DEPTH;
  1314.      break;
  1315.       case GL_MAX_NAME_STACK_DEPTH:
  1316.      *params = (GLdouble) MAX_NAME_STACK_DEPTH;
  1317.      break;
  1318.       case GL_MAX_PIXEL_MAP_TABLE:
  1319.      *params = (GLdouble) MAX_PIXEL_MAP_TABLE;
  1320.      break;
  1321.       case GL_MAX_PROJECTION_STACK_DEPTH:
  1322.      *params = (GLdouble) MAX_PROJECTION_STACK_DEPTH;
  1323.      break;
  1324.       case GL_MAX_TEXTURE_SIZE:
  1325.      *params = (GLdouble) MAX_TEXTURE_SIZE;
  1326.      break;
  1327.       case GL_MAX_TEXTURE_STACK_DEPTH:
  1328.      *params = (GLdouble) MAX_TEXTURE_STACK_DEPTH;
  1329.      break;
  1330.       case GL_MAX_VIEWPORT_DIMS:
  1331.          params[0] = (GLdouble) MAX_WIDTH;
  1332.          params[1] = (GLdouble) MAX_HEIGHT;
  1333.          break;
  1334.       case GL_MODELVIEW_MATRIX:
  1335.      for (i=0;i<16;i++) {
  1336.         params[i] = (GLdouble) CC.ModelViewMatrix[i];
  1337.      }
  1338.      break;
  1339.       case GL_MODELVIEW_STACK_DEPTH:
  1340.      *params = (GLdouble) CC.ModelViewStackDepth;
  1341.      break;
  1342.       case GL_NAME_STACK_DEPTH:
  1343.      *params = (GLdouble) CC.NameStackDepth;
  1344.      break;
  1345.       case GL_NORMALIZE:
  1346.      *params = (GLdouble) CC.Transform.Normalize;
  1347.      break;
  1348.       case GL_PACK_ALIGNMENT:
  1349.      *params = (GLdouble) CC.PackAlignment;
  1350.      break;
  1351.       case GL_PACK_LSB_FIRST:
  1352.      *params = (GLdouble) CC.PackLSBFirst;
  1353.      break;
  1354.       case GL_PACK_ROW_LENGTH:
  1355.      *params = (GLdouble) CC.PackRowLength;
  1356.      break;
  1357.       case GL_PACK_SKIP_PIXELS:
  1358.      *params = (GLdouble) CC.PackSkipPixels;
  1359.      break;
  1360.       case GL_PACK_SKIP_ROWS:
  1361.      *params = (GLdouble) CC.PackSkipRows;
  1362.      break;
  1363.       case GL_PACK_SWAP_BYTES:
  1364.      *params = (GLdouble) CC.PackSwapBytes;
  1365.      break;
  1366.       case GL_PERSPECTIVE_CORRECTION_HINT:
  1367.      *params = (GLdouble) CC.Hint.PerspectiveCorrection;
  1368.      break;
  1369.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  1370.      *params = (GLdouble) CC.Pixel.MapAtoAsize;
  1371.      break;
  1372.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  1373.      *params = (GLdouble) CC.Pixel.MapBtoBsize;
  1374.      break;
  1375.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  1376.      *params = (GLdouble) CC.Pixel.MapGtoGsize;
  1377.      break;
  1378.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  1379.      *params = (GLdouble) CC.Pixel.MapItoAsize;
  1380.      break;
  1381.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  1382.      *params = (GLdouble) CC.Pixel.MapItoBsize;
  1383.      break;
  1384.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  1385.      *params = (GLdouble) CC.Pixel.MapItoGsize;
  1386.      break;
  1387.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  1388.      *params = (GLdouble) CC.Pixel.MapItoIsize;
  1389.      break;
  1390.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  1391.      *params = (GLdouble) CC.Pixel.MapItoRsize;
  1392.      break;
  1393.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  1394.      *params = (GLdouble) CC.Pixel.MapRtoRsize;
  1395.      break;
  1396.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  1397.      *params = (GLdouble) CC.Pixel.MapStoSsize;
  1398.      break;
  1399.       case GL_POINT_SIZE:
  1400.          *params = (GLdouble) CC.Point.Size;
  1401.          break;
  1402.       case GL_POINT_SIZE_GRANULARITY:
  1403.      *params = (GLdouble) POINT_SIZE_GRANULARITY;
  1404.      break;
  1405.       case GL_POINT_SIZE_RANGE:
  1406.      params[0] = (GLdouble) MIN_POINT_SIZE;
  1407.      params[1] = (GLdouble) MAX_POINT_SIZE;
  1408.      break;
  1409.       case GL_POINT_SMOOTH:
  1410.      *params = (GLdouble) CC.Point.SmoothFlag;
  1411.      break;
  1412.       case GL_POINT_SMOOTH_HINT:
  1413.      *params = (GLdouble) CC.Hint.PointSmooth;
  1414.      break;
  1415.       case GL_POLYGON_MODE:
  1416.      params[0] = (GLdouble) CC.Polygon.FrontMode;
  1417.      params[1] = (GLdouble) CC.Polygon.BackMode;
  1418.      break;
  1419.       case GL_POLYGON_OFFSET_BIAS_EXT:
  1420.          *params = (GLdouble) CC.Polygon.OffsetBias;
  1421.          break;
  1422.       case GL_POLYGON_OFFSET_FACTOR_EXT:
  1423.          *params = (GLdouble) CC.Polygon.OffsetFactor;
  1424.          break;
  1425.       case GL_POLYGON_SMOOTH:
  1426.      *params = (GLdouble) CC.Polygon.SmoothFlag;
  1427.      break;
  1428.       case GL_POLYGON_SMOOTH_HINT:
  1429.      *params = (GLdouble) CC.Hint.PolygonSmooth;
  1430.      break;
  1431.       case GL_POLYGON_STIPPLE:
  1432.      for (i=0;i<32;i++) {        /* RIGHT? */
  1433.         params[i] = (GLdouble) CC.PolygonStipple[i];
  1434.      }
  1435.      break;
  1436.       case GL_PROJECTION_MATRIX:
  1437.      for (i=0;i<16;i++) {
  1438.         params[i] = (GLdouble) CC.ProjectionMatrix[i];
  1439.      }
  1440.      break;
  1441.       case GL_PROJECTION_STACK_DEPTH:
  1442.      *params = (GLdouble) CC.ProjectionStackDepth;
  1443.      break;
  1444.       case GL_READ_BUFFER:
  1445.      *params = (GLdouble) CC.Pixel.ReadBuffer;
  1446.      break;
  1447.       case GL_RED_BIAS:
  1448.          *params = (GLdouble) CC.Pixel.RedBias;
  1449.          break;
  1450.       case GL_RED_BITS:
  1451.          *params = (GLdouble) bits( CC.RedScale );
  1452.          break;
  1453.       case GL_RED_SCALE:
  1454.          *params = (GLdouble) CC.Pixel.RedScale;
  1455.          break;
  1456.       case GL_RENDER_MODE:
  1457.      *params = (GLdouble) CC.RenderMode;
  1458.      break;
  1459.       case GL_RGBA_MODE:
  1460.      *params = (GLdouble) CC.RGBAflag;
  1461.      break;
  1462.       case GL_SCISSOR_BOX:
  1463.      params[0] = (GLdouble) CC.Scissor.X;
  1464.      params[1] = (GLdouble) CC.Scissor.Y;
  1465.      params[2] = (GLdouble) CC.Scissor.Width;
  1466.      params[3] = (GLdouble) CC.Scissor.Height;
  1467.      break;
  1468.       case GL_SCISSOR_TEST:
  1469.      *params = (GLdouble) CC.Scissor.Enabled;
  1470.      break;
  1471.       case GL_SHADE_MODEL:
  1472.      *params = (GLdouble) CC.Light.ShadeModel;
  1473.      break;
  1474.       case GL_STENCIL_BITS:
  1475.          *params = (GLdouble) (8*sizeof(GLstencil));
  1476.          break;
  1477.       case GL_STENCIL_CLEAR_VALUE:
  1478.      *params = (GLdouble) CC.Stencil.Clear;
  1479.      break;
  1480.       case GL_STENCIL_FAIL:
  1481.      *params = (GLdouble) CC.Stencil.FailFunc;
  1482.      break;
  1483.       case GL_STENCIL_FUNC:
  1484.      *params = (GLdouble) CC.Stencil.Function;
  1485.      break;
  1486.       case GL_STENCIL_PASS_DEPTH_FAIL:
  1487.      *params = (GLdouble) CC.Stencil.ZFailFunc;
  1488.      break;
  1489.       case GL_STENCIL_PASS_DEPTH_PASS:
  1490.      *params = (GLdouble) CC.Stencil.ZPassFunc;
  1491.      break;
  1492.       case GL_STENCIL_REF:
  1493.      *params = (GLdouble) CC.Stencil.Ref;
  1494.      break;
  1495.       case GL_STENCIL_TEST:
  1496.      *params = (GLdouble) CC.Stencil.Enabled;
  1497.      break;
  1498.       case GL_STENCIL_VALUE_MASK:
  1499.      *params = (GLdouble) CC.Stencil.ValueMask;
  1500.      break;
  1501.       case GL_STENCIL_WRITEMASK:
  1502.      *params = (GLdouble) CC.Stencil.WriteMask;
  1503.      break;
  1504.       case GL_STEREO:
  1505.      *params = 0.0;   /* TODO */
  1506.      break;
  1507.       case GL_SUBPIXEL_BITS:
  1508.      *params = 0.0;   /* TODO */
  1509.      break;
  1510.       case GL_TEXTURE_1D:
  1511.      *params = (CC.Texture.Enabled & 1) ? 1.0 : 0.0;
  1512.      break;
  1513.       case GL_TEXTURE_2D:
  1514.      *params = (CC.Texture.Enabled & 2) ? 1.0 : 0.0;
  1515.      break;
  1516.       case GL_TEXTURE_ENV_COLOR:
  1517.      params[0] = (GLdouble) CC.Texture.EnvColor[0];
  1518.      params[1] = (GLdouble) CC.Texture.EnvColor[1];
  1519.      params[2] = (GLdouble) CC.Texture.EnvColor[2];
  1520.      params[3] = (GLdouble) CC.Texture.EnvColor[3];
  1521.      break;
  1522.       case GL_TEXTURE_ENV_MODE:
  1523.      *params = (GLdouble) CC.Texture.EnvMode;
  1524.      break;
  1525.       case GL_TEXTURE_GEN_S:
  1526.      *params = (CC.Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  1527.      break;
  1528.       case GL_TEXTURE_GEN_T:
  1529.      *params = (CC.Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  1530.      break;
  1531.       case GL_TEXTURE_GEN_R:
  1532.      *params = (CC.Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  1533.      break;
  1534.       case GL_TEXTURE_GEN_Q:
  1535.      *params = (CC.Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  1536.      break;
  1537.       case GL_TEXTURE_MATRIX:
  1538.          for (i=0;i<16;i++) {
  1539.         params[i] = (GLdouble) CC.TextureMatrix[i];
  1540.      }
  1541.      break;
  1542.       case GL_TEXTURE_STACK_DEPTH:
  1543.      *params = (GLdouble) CC.TextureStackDepth;
  1544.      break;
  1545.       case GL_UNPACK_ALIGNMENT:
  1546.      *params = (GLdouble) CC.UnpackAlignment;
  1547.      break;
  1548.       case GL_UNPACK_LSB_FIRST:
  1549.      *params = (GLdouble) CC.UnpackLSBFirst;
  1550.      break;
  1551.       case GL_UNPACK_ROW_LENGTH:
  1552.      *params = (GLdouble) CC.UnpackRowLength;
  1553.      break;
  1554.       case GL_UNPACK_SKIP_PIXELS:
  1555.      *params = (GLdouble) CC.UnpackSkipPixels;
  1556.      break;
  1557.       case GL_UNPACK_SKIP_ROWS:
  1558.      *params = (GLdouble) CC.UnpackSkipRows;
  1559.      break;
  1560.       case GL_UNPACK_SWAP_BYTES:
  1561.      *params = (GLdouble) CC.UnpackSwapBytes;
  1562.      break;
  1563.       case GL_VIEWPORT:
  1564.      params[0] = (GLdouble) CC.Viewport.X;
  1565.      params[1] = (GLdouble) CC.Viewport.Y;
  1566.      params[2] = (GLdouble) CC.Viewport.Width;
  1567.      params[3] = (GLdouble) CC.Viewport.Height;
  1568.      break;
  1569.       case GL_ZOOM_X:
  1570.      *params = (GLdouble) CC.Pixel.ZoomX;
  1571.      break;
  1572.       case GL_ZOOM_Y:
  1573.      *params = (GLdouble) CC.Pixel.ZoomY;
  1574.      break;
  1575.       case GL_VERTEX_ARRAY_SIZE_EXT:
  1576.          *params = (GLdouble) CC.Array.VertexSize;
  1577.          break;
  1578.       case GL_VERTEX_ARRAY_TYPE_EXT:
  1579.          *params = (GLdouble) CC.Array.VertexType;
  1580.          break;
  1581.       case GL_VERTEX_ARRAY_STRIDE_EXT:
  1582.          *params = (GLdouble) CC.Array.VertexStride;
  1583.          break;
  1584.       case GL_VERTEX_ARRAY_COUNT_EXT:
  1585.          *params = (GLdouble) CC.Array.VertexCount;
  1586.          break;
  1587.       case GL_NORMAL_ARRAY_TYPE_EXT:
  1588.          *params = (GLdouble) CC.Array.NormalType;
  1589.          break;
  1590.       case GL_NORMAL_ARRAY_STRIDE_EXT:
  1591.          *params = (GLdouble) CC.Array.NormalStride;
  1592.          break;
  1593.       case GL_NORMAL_ARRAY_COUNT_EXT:
  1594.          *params = (GLdouble) CC.Array.NormalCount;
  1595.          break;
  1596.       case GL_COLOR_ARRAY_SIZE_EXT:
  1597.          *params = (GLdouble) CC.Array.ColorSize;
  1598.          break;
  1599.       case GL_COLOR_ARRAY_TYPE_EXT:
  1600.          *params = (GLdouble) CC.Array.ColorType;
  1601.          break;
  1602.       case GL_COLOR_ARRAY_STRIDE_EXT:
  1603.          *params = (GLdouble) CC.Array.ColorStride;
  1604.          break;
  1605.       case GL_COLOR_ARRAY_COUNT_EXT:
  1606.          *params = (GLdouble) CC.Array.ColorCount;
  1607.          break;
  1608.       case GL_INDEX_ARRAY_TYPE_EXT:
  1609.          *params = (GLdouble) CC.Array.IndexType;
  1610.          break;
  1611.       case GL_INDEX_ARRAY_STRIDE_EXT:
  1612.          *params = (GLdouble) CC.Array.IndexStride;
  1613.          break;
  1614.       case GL_INDEX_ARRAY_COUNT_EXT:
  1615.          *params = (GLdouble) CC.Array.IndexCount;
  1616.          break;
  1617.       case GL_TEXTURE_COORD_ARRAY_SIZE_EXT:
  1618.          *params = (GLdouble) CC.Array.TexCoordSize;
  1619.          break;
  1620.       case GL_TEXTURE_COORD_ARRAY_TYPE_EXT:
  1621.          *params = (GLdouble) CC.Array.TexCoordType;
  1622.          break;
  1623.       case GL_TEXTURE_COORD_ARRAY_STRIDE_EXT:
  1624.          *params = (GLdouble) CC.Array.TexCoordStride;
  1625.          break;
  1626.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  1627.          *params = (GLdouble) CC.Array.TexCoordCount;
  1628.          break;
  1629.       case GL_EDGE_FLAG_ARRAY_STRIDE_EXT:
  1630.          *params = (GLdouble) CC.Array.EdgeFlagStride;
  1631.          break;
  1632.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  1633.          *params = (GLdouble) CC.Array.EdgeFlagCount;
  1634.          break;
  1635.  
  1636.       default:
  1637.          gl_error( GL_INVALID_ENUM, "glGetDoublev" );
  1638.    }
  1639. }
  1640.  
  1641.  
  1642.  
  1643.  
  1644. void glGetFloatv( GLenum pname, GLfloat *params )
  1645. {
  1646.    GLuint i;
  1647.  
  1648.    if (INSIDE_BEGIN_END) {
  1649.       gl_error( GL_INVALID_OPERATION, "glGetFloatv" );
  1650.       return;
  1651.    }
  1652.    switch (pname) {
  1653.       case GL_ACCUM_RED_BITS:
  1654.       case GL_ACCUM_GREEN_BITS:
  1655.       case GL_ACCUM_BLUE_BITS:
  1656.       case GL_ACCUM_ALPHA_BITS:
  1657.          *params = (GLfloat) (sizeof(GLaccum)*8);
  1658.          break;
  1659.       case GL_ACCUM_CLEAR_VALUE:
  1660.          params[0] = CC.Accum.ClearColor[0];
  1661.          params[1] = CC.Accum.ClearColor[1];
  1662.          params[2] = CC.Accum.ClearColor[2];
  1663.          params[3] = CC.Accum.ClearColor[3];
  1664.          break;
  1665.       case GL_ALPHA_BIAS:
  1666.          *params = CC.Pixel.AlphaBias;
  1667.          break;
  1668.       case GL_ALPHA_BITS:
  1669.          if (CC.FrontAlphaEnabled || CC.BackAlphaEnabled) {
  1670.             *params = 8*sizeof(GLubyte);
  1671.          }
  1672.          else {
  1673.             *params = 0.0F;
  1674.          }
  1675.          break;
  1676.       case GL_ALPHA_SCALE:
  1677.          *params = CC.Pixel.AlphaScale;
  1678.          break;
  1679.       case GL_ALPHA_TEST:
  1680.          *params = (GLfloat) CC.Color.AlphaEnabled;
  1681.          break;
  1682.       case GL_ALPHA_TEST_FUNC:
  1683.          *params = (GLfloat) CC.Color.AlphaFunc;
  1684.          break;
  1685.       case GL_ALPHA_TEST_REF:
  1686.          *params = (GLfloat) CC.Color.AlphaRef;
  1687.          break;
  1688.       case GL_ATTRIB_STACK_DEPTH:
  1689.          *params = (GLfloat ) CC.AttribStackDepth;
  1690.          break;
  1691.       case GL_AUTO_NORMAL:
  1692.          *params = (GLfloat) CC.Eval.AutoNormal;
  1693.          break;
  1694.       case GL_AUX_BUFFERS:
  1695.          *params = (GLfloat) NUM_AUX_BUFFERS;
  1696.          break;
  1697.       case GL_BLEND:
  1698.          *params = (GLfloat) CC.Color.BlendEnabled;
  1699.          break;
  1700.       case GL_BLEND_DST:
  1701.          *params = (GLfloat) CC.Color.BlendDst;
  1702.          break;
  1703.       case GL_BLEND_SRC:
  1704.          *params = (GLfloat) CC.Color.BlendSrc;
  1705.          break;
  1706.       case GL_BLEND_EQUATION_EXT:
  1707.      *params = (GLfloat) CC.Color.BlendEquation;
  1708.      break;
  1709.       case GL_BLEND_COLOR_EXT:
  1710.      params[0] = CC.Color.BlendColor[0];
  1711.      params[1] = CC.Color.BlendColor[1];
  1712.      params[2] = CC.Color.BlendColor[2];
  1713.      params[3] = CC.Color.BlendColor[3];
  1714.      break;
  1715.       case GL_BLUE_BIAS:
  1716.          *params = CC.Pixel.BlueBias;
  1717.          break;
  1718.       case GL_BLUE_BITS:
  1719.          *params = (GLfloat) bits( CC.BlueScale );
  1720.          break;
  1721.       case GL_BLUE_SCALE:
  1722.          *params = CC.Pixel.BlueScale;
  1723.          break;
  1724.       case GL_CLIP_PLANE0:
  1725.       case GL_CLIP_PLANE1:
  1726.       case GL_CLIP_PLANE2:
  1727.       case GL_CLIP_PLANE3:
  1728.       case GL_CLIP_PLANE4:
  1729.       case GL_CLIP_PLANE5:
  1730.          *params = (GLfloat) CC.Transform.ClipEnabled[pname-GL_CLIP_PLANE0];
  1731.          break;
  1732.       case GL_COLOR_CLEAR_VALUE:
  1733.          params[0] = (GLfloat) CC.Color.ClearColor[0];
  1734.          params[1] = (GLfloat) CC.Color.ClearColor[1];
  1735.          params[2] = (GLfloat) CC.Color.ClearColor[2];
  1736.          params[3] = (GLfloat) CC.Color.ClearColor[3];
  1737.          break;
  1738.       case GL_COLOR_MATERIAL:
  1739.          *params = (GLfloat) CC.Light.ColorMaterialEnabled;
  1740.          break;
  1741.       case GL_COLOR_MATERIAL_FACE:
  1742.          *params = (GLfloat) CC.Light.ColorMaterialFace;
  1743.          break;
  1744.       case GL_COLOR_MATERIAL_PARAMETER:
  1745.          *params = (GLfloat) CC.Light.ColorMaterialMode;
  1746.          break;
  1747.       case GL_COLOR_WRITEMASK:
  1748.          params[0] = (CC.Color.ColorMask & 8) ? 1.0F : 0.0F;
  1749.          params[1] = (CC.Color.ColorMask & 4) ? 1.0F : 0.0F;
  1750.          params[2] = (CC.Color.ColorMask & 2) ? 1.0F : 0.0F;
  1751.          params[3] = (CC.Color.ColorMask & 1) ? 1.0F : 0.0F;
  1752.          break;
  1753.       case GL_CULL_FACE:
  1754.          *params = (GLfloat) CC.Polygon.CullFlag;
  1755.          break;
  1756.       case GL_CULL_FACE_MODE:
  1757.          *params = (GLfloat) CC.Polygon.CullFaceMode;
  1758.          break;
  1759.       case GL_CURRENT_COLOR:
  1760.          params[0] = CC.Current.IntColor[0] / CC.RedScale;
  1761.          params[1] = CC.Current.IntColor[1] / CC.GreenScale;
  1762.          params[2] = CC.Current.IntColor[2] / CC.BlueScale;
  1763.          params[3] = CC.Current.IntColor[3] / CC.AlphaScale;
  1764.          break;
  1765.       case GL_CURRENT_INDEX:
  1766.          *params = (GLfloat) CC.Current.Index;
  1767.          break;
  1768.       case GL_CURRENT_NORMAL:
  1769.          params[0] = CC.Current.Normal[0];
  1770.          params[1] = CC.Current.Normal[1];
  1771.          params[2] = CC.Current.Normal[2];
  1772.          break;
  1773.       case GL_CURRENT_RASTER_COLOR:
  1774.      params[0] = CC.Current.RasterColor[0];
  1775.      params[1] = CC.Current.RasterColor[1];
  1776.      params[2] = CC.Current.RasterColor[2];
  1777.      params[3] = CC.Current.RasterColor[3];
  1778.      break;
  1779.       case GL_CURRENT_RASTER_DISTANCE:
  1780.      params[0] = CC.Current.RasterDistance;
  1781.      break;
  1782.       case GL_CURRENT_RASTER_INDEX:
  1783.      *params = (GLfloat) CC.Current.RasterIndex;
  1784.      break;
  1785.       case GL_CURRENT_RASTER_POSITION:
  1786.      params[0] = CC.Current.RasterPos[0];
  1787.      params[1] = CC.Current.RasterPos[1];
  1788.      params[2] = CC.Current.RasterPos[2];
  1789.      params[3] = CC.Current.RasterPos[3];
  1790.      break;
  1791.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  1792.      params[0] = CC.Current.RasterTexCoord[0];
  1793.      params[1] = CC.Current.RasterTexCoord[1];
  1794.      params[2] = CC.Current.RasterTexCoord[2];
  1795.      params[3] = CC.Current.RasterTexCoord[3];
  1796.      break;
  1797.       case GL_CURRENT_RASTER_POSITION_VALID:
  1798.      *params = (GLfloat) CC.Current.RasterPosValid;
  1799.      break;
  1800.       case GL_CURRENT_TEXTURE_COORDS:
  1801.      params[0] = (GLfloat) CC.Current.TexCoord[0];
  1802.      params[1] = (GLfloat) CC.Current.TexCoord[1];
  1803.      params[2] = (GLfloat) CC.Current.TexCoord[2];
  1804.      params[3] = (GLfloat) CC.Current.TexCoord[3];
  1805.      break;
  1806.       case GL_DEPTH_BIAS:
  1807.      *params = (GLfloat) CC.Pixel.DepthBias;
  1808.      break;
  1809.       case GL_DEPTH_BITS:
  1810.      *params = (GLfloat) (8*sizeof(GLdepth));
  1811.      break;
  1812.       case GL_DEPTH_CLEAR_VALUE:
  1813.      *params = (GLfloat) CC.Depth.Clear;
  1814.      break;
  1815.       case GL_DEPTH_FUNC:
  1816.      *params = (GLfloat) CC.Depth.Func;
  1817.      break;
  1818.       case GL_DEPTH_RANGE:
  1819.          params[0] = (GLfloat) CC.Viewport.Near;
  1820.          params[1] = (GLfloat) CC.Viewport.Far;
  1821.      break;
  1822.       case GL_DEPTH_SCALE:
  1823.      *params = (GLfloat) CC.Pixel.DepthScale;
  1824.      break;
  1825.       case GL_DEPTH_TEST:
  1826.      *params = (GLfloat) CC.Depth.Test;
  1827.      break;
  1828.       case GL_DEPTH_WRITEMASK:
  1829.      *params = (GLfloat) CC.Depth.Mask;
  1830.      break;
  1831.       case GL_DITHER:
  1832.      *params = (GLfloat) CC.Color.DitherFlag;
  1833.      break;
  1834.       case GL_DOUBLEBUFFER:
  1835.      *params = (GLfloat) CC.DBflag;
  1836.      break;
  1837.       case GL_DRAW_BUFFER:
  1838.      *params = (GLfloat) CC.Color.DrawBuffer;
  1839.      break;
  1840.       case GL_EDGE_FLAG:
  1841.      *params = (GLfloat) CC.Current.EdgeFlag;
  1842.      break;
  1843.       case GL_FOG:
  1844.      *params = (GLfloat) CC.Fog.Enabled;
  1845.      break;
  1846.       case GL_FOG_COLOR:
  1847.      params[0] = CC.Fog.Color[0];
  1848.      params[1] = CC.Fog.Color[1];
  1849.      params[2] = CC.Fog.Color[2];
  1850.      params[3] = CC.Fog.Color[3];
  1851.      break;
  1852.       case GL_FOG_DENSITY:
  1853.      *params = CC.Fog.Density;
  1854.      break;
  1855.       case GL_FOG_END:
  1856.      *params = CC.Fog.End;
  1857.      break;
  1858.       case GL_FOG_HINT:
  1859.      *params = (GLfloat) CC.Hint.Fog;
  1860.      break;
  1861.       case GL_FOG_INDEX:
  1862.      *params = CC.Fog.Index;
  1863.      break;
  1864.       case GL_FOG_MODE:
  1865.      *params = (GLfloat) CC.Fog.Mode;
  1866.      break;
  1867.       case GL_FOG_START:
  1868.      *params = CC.Fog.Start;
  1869.      break;
  1870.       case GL_FRONT_FACE:
  1871.      *params = (GLfloat) CC.Polygon.FrontFace;
  1872.      break;
  1873.       case GL_GREEN_BIAS:
  1874.          *params = (GLfloat) CC.Pixel.GreenBias;
  1875.          break;
  1876.       case GL_GREEN_BITS:
  1877.          *params = (GLfloat) bits( CC.GreenScale );
  1878.          break;
  1879.       case GL_GREEN_SCALE:
  1880.          *params = (GLfloat) CC.Pixel.GreenScale;
  1881.          break;
  1882.       case GL_INDEX_BITS:
  1883.      {
  1884.         GLuint width, height, depth;
  1885.         (*DD.buffer_size)( &width, &height, &depth );
  1886.         *params = (GLfloat) depth;
  1887.      }
  1888.      break;
  1889.       case GL_INDEX_CLEAR_VALUE:
  1890.          *params = (GLfloat) CC.Color.ClearIndex;
  1891.      break;
  1892.       case GL_INDEX_MODE:
  1893.      *params = CC.RGBAflag ? 0.0F : 1.0F;
  1894.      break;
  1895.       case GL_INDEX_OFFSET:
  1896.      *params = (GLfloat) CC.Pixel.IndexOffset;
  1897.      break;
  1898.       case GL_INDEX_SHIFT:
  1899.      *params = (GLfloat) CC.Pixel.IndexShift;
  1900.      break;
  1901.       case GL_INDEX_WRITEMASK:
  1902.      *params = (GLfloat) CC.Color.IndexMask;
  1903.      break;
  1904.       case GL_LIGHT0:
  1905.       case GL_LIGHT1:
  1906.       case GL_LIGHT2:
  1907.       case GL_LIGHT3:
  1908.       case GL_LIGHT4:
  1909.       case GL_LIGHT5:
  1910.       case GL_LIGHT6:
  1911.       case GL_LIGHT7:
  1912.      *params = (GLfloat) CC.Light.Light[pname-GL_LIGHT0].Enabled;
  1913.      break;
  1914.       case GL_LIGHTING:
  1915.      *params = (GLfloat) CC.Light.Enabled;
  1916.      break;
  1917.       case GL_LIGHT_MODEL_AMBIENT:
  1918.      params[0] = CC.Light.Model.Ambient[0];
  1919.      params[1] = CC.Light.Model.Ambient[1];
  1920.      params[2] = CC.Light.Model.Ambient[2];
  1921.      params[3] = CC.Light.Model.Ambient[3];
  1922.      break;
  1923.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  1924.      *params = (GLfloat) CC.Light.Model.LocalViewer;
  1925.      break;
  1926.       case GL_LIGHT_MODEL_TWO_SIDE:
  1927.      *params = (GLfloat) CC.Light.Model.TwoSide;
  1928.      break;
  1929.       case GL_LINE_SMOOTH:
  1930.      *params = (GLfloat) CC.Line.SmoothFlag;
  1931.      break;
  1932.       case GL_LINE_SMOOTH_HINT:
  1933.      *params = (GLfloat) CC.Hint.LineSmooth;
  1934.      break;
  1935.       case GL_LINE_STIPPLE:
  1936.      *params = (GLfloat) CC.Line.StippleFlag;
  1937.      break;
  1938.       case GL_LINE_STIPPLE_PATTERN:
  1939.          *params = (GLfloat) CC.Line.StipplePattern;
  1940.          break;
  1941.       case GL_LINE_STIPPLE_REPEAT:
  1942.          *params = (GLfloat) CC.Line.StippleFactor;
  1943.          break;
  1944.       case GL_LINE_WIDTH:
  1945.      *params = (GLfloat) CC.Line.Width;
  1946.      break;
  1947.       case GL_LINE_WIDTH_GRANULARITY:
  1948.      *params = (GLfloat) LINE_WIDTH_GRANULARITY;
  1949.      break;
  1950.       case GL_LINE_WIDTH_RANGE:
  1951.      params[0] = (GLfloat) MIN_LINE_WIDTH;
  1952.      params[1] = (GLfloat) MAX_LINE_WIDTH;
  1953.      break;
  1954.       case GL_LIST_BASE:
  1955.      *params = (GLfloat) CC.List.ListBase;
  1956.      break;
  1957.       case GL_LIST_INDEX:
  1958.      *params = (GLfloat) gl_list_index();
  1959.      break;
  1960.       case GL_LIST_MODE:
  1961.      *params = CC.ExecuteFlag ? (GLfloat) GL_COMPILE_AND_EXECUTE
  1962.                      : (GLfloat) GL_COMPILE;
  1963.      break;
  1964.       case GL_LOGIC_OP:
  1965.      *params = (GLfloat) CC.Color.LogicOpEnabled;
  1966.      break;
  1967.       case GL_LOGIC_OP_MODE:
  1968.          *params = (GLfloat) CC.Color.LogicOp;
  1969.      break;
  1970.       case GL_MAP1_COLOR_4:
  1971.      *params = (GLfloat) CC.Eval.Map1Color4;
  1972.      break;
  1973.       case GL_MAP1_GRID_DOMAIN:
  1974.      params[0] = CC.Eval.MapGrid1u1;
  1975.      params[1] = CC.Eval.MapGrid1u2;
  1976.      break;
  1977.       case GL_MAP1_GRID_SEGMENTS:
  1978.      *params = (GLfloat) CC.Eval.MapGrid1un;
  1979.      break;
  1980.       case GL_MAP1_INDEX:
  1981.      *params = (GLfloat) CC.Eval.Map1Index;
  1982.      break;
  1983.       case GL_MAP1_NORMAL:
  1984.      *params = (GLfloat) CC.Eval.Map1Normal;
  1985.      break;
  1986.       case GL_MAP1_TEXTURE_COORD_1:
  1987.      *params = (GLfloat) CC.Eval.Map1TextureCoord1;
  1988.      break;
  1989.       case GL_MAP1_TEXTURE_COORD_2:
  1990.      *params = (GLfloat) CC.Eval.Map1TextureCoord2;
  1991.      break;
  1992.       case GL_MAP1_TEXTURE_COORD_3:
  1993.      *params = (GLfloat) CC.Eval.Map1TextureCoord3;
  1994.      break;
  1995.       case GL_MAP1_TEXTURE_COORD_4:
  1996.      *params = (GLfloat) CC.Eval.Map1TextureCoord4;
  1997.      break;
  1998.       case GL_MAP1_VERTEX_3:
  1999.      *params = (GLfloat) CC.Eval.Map1Vertex3;
  2000.      break;
  2001.       case GL_MAP1_VERTEX_4:
  2002.      *params = (GLfloat) CC.Eval.Map1Vertex4;
  2003.      break;
  2004.       case GL_MAP2_COLOR_4:
  2005.      *params = (GLfloat) CC.Eval.Map2Color4;
  2006.      break;
  2007.       case GL_MAP2_GRID_DOMAIN:
  2008.      params[0] = CC.Eval.MapGrid2u1;
  2009.      params[1] = CC.Eval.MapGrid2u2;
  2010.      params[2] = CC.Eval.MapGrid2v1;
  2011.      params[3] = CC.Eval.MapGrid2v2;
  2012.      break;
  2013.       case GL_MAP2_GRID_SEGMENTS:
  2014.      params[0] = (GLfloat) CC.Eval.MapGrid2un;
  2015.      params[1] = (GLfloat) CC.Eval.MapGrid2vn;
  2016.      break;
  2017.       case GL_MAP2_INDEX:
  2018.      *params = (GLfloat) CC.Eval.Map2Index;
  2019.      break;
  2020.       case GL_MAP2_NORMAL:
  2021.      *params = (GLfloat) CC.Eval.Map2Normal;
  2022.      break;
  2023.       case GL_MAP2_TEXTURE_COORD_1:
  2024.      *params = CC.Eval.Map2TextureCoord1;
  2025.      break;
  2026.       case GL_MAP2_TEXTURE_COORD_2:
  2027.      *params = CC.Eval.Map2TextureCoord2;
  2028.      break;
  2029.       case GL_MAP2_TEXTURE_COORD_3:
  2030.      *params = CC.Eval.Map2TextureCoord3;
  2031.      break;
  2032.       case GL_MAP2_TEXTURE_COORD_4:
  2033.      *params = CC.Eval.Map2TextureCoord4;
  2034.      break;
  2035.       case GL_MAP2_VERTEX_3:
  2036.      *params = (GLfloat) CC.Eval.Map2Vertex3;
  2037.      break;
  2038.       case GL_MAP2_VERTEX_4:
  2039.      *params = (GLfloat) CC.Eval.Map2Vertex4;
  2040.      break;
  2041.       case GL_MAP_COLOR:
  2042.      *params = (GLfloat) CC.Pixel.MapColorFlag;
  2043.      break;
  2044.       case GL_MAP_STENCIL:
  2045.      *params = (GLfloat) CC.Pixel.MapStencilFlag;
  2046.      break;
  2047.       case GL_MATRIX_MODE:
  2048.      *params = (GLfloat) CC.Transform.MatrixMode;
  2049.      break;
  2050.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2051.      *params = (GLfloat) MAX_ATTRIB_STACK_DEPTH;
  2052.      break;
  2053.       case GL_MAX_CLIP_PLANES:
  2054.      *params = (GLfloat) MAX_CLIP_PLANES;
  2055.      break;
  2056.       case GL_MAX_EVAL_ORDER:
  2057.      *params = (GLfloat) MAX_EVAL_ORDER;
  2058.      break;
  2059.       case GL_MAX_LIGHTS:
  2060.      *params = (GLfloat) MAX_LIGHTS;
  2061.      break;
  2062.       case GL_MAX_LIST_NESTING:
  2063.      *params = (GLfloat) MAX_LIST_NESTING;
  2064.      break;
  2065.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2066.      *params = (GLfloat) MAX_MODELVIEW_STACK_DEPTH;
  2067.      break;
  2068.       case GL_MAX_NAME_STACK_DEPTH:
  2069.      *params = (GLfloat) MAX_NAME_STACK_DEPTH;
  2070.      break;
  2071.       case GL_MAX_PIXEL_MAP_TABLE:
  2072.      *params = (GLfloat) MAX_PIXEL_MAP_TABLE;
  2073.      break;
  2074.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2075.      *params = (GLfloat) MAX_PROJECTION_STACK_DEPTH;
  2076.      break;
  2077.       case GL_MAX_TEXTURE_SIZE:
  2078.      *params = (GLfloat) MAX_TEXTURE_SIZE;
  2079.      break;
  2080.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2081.      *params = (GLfloat) MAX_TEXTURE_STACK_DEPTH;
  2082.      break;
  2083.       case GL_MAX_VIEWPORT_DIMS:
  2084.          params[0] = (GLfloat) MAX_WIDTH;
  2085.          params[1] = (GLfloat) MAX_HEIGHT;
  2086.          break;
  2087.       case GL_MODELVIEW_MATRIX:
  2088.      for (i=0;i<16;i++) {
  2089.         params[i] = CC.ModelViewMatrix[i];
  2090.      }
  2091.      break;
  2092.       case GL_MODELVIEW_STACK_DEPTH:
  2093.      *params = (GLfloat) CC.ModelViewStackDepth;
  2094.      break;
  2095.       case GL_NAME_STACK_DEPTH:
  2096.      *params = (GLfloat) CC.NameStackDepth;
  2097.      break;
  2098.       case GL_NORMALIZE:
  2099.      *params = (GLfloat) CC.Transform.Normalize;
  2100.      break;
  2101.       case GL_PACK_ALIGNMENT:
  2102.      *params = (GLfloat) CC.PackAlignment;
  2103.      break;
  2104.       case GL_PACK_LSB_FIRST:
  2105.      *params = (GLfloat) CC.PackLSBFirst;
  2106.      break;
  2107.       case GL_PACK_ROW_LENGTH:
  2108.      *params = (GLfloat) CC.PackRowLength;
  2109.      break;
  2110.       case GL_PACK_SKIP_PIXELS:
  2111.      *params = (GLfloat) CC.PackSkipPixels;
  2112.      break;
  2113.       case GL_PACK_SKIP_ROWS:
  2114.      *params = (GLfloat) CC.PackSkipRows;
  2115.      break;
  2116.       case GL_PACK_SWAP_BYTES:
  2117.      *params = (GLfloat) CC.PackSwapBytes;
  2118.      break;
  2119.       case GL_PERSPECTIVE_CORRECTION_HINT:
  2120.      *params = (GLfloat) CC.Hint.PerspectiveCorrection;
  2121.      break;
  2122.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  2123.      *params = (GLfloat) CC.Pixel.MapAtoAsize;
  2124.      break;
  2125.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  2126.      *params = (GLfloat) CC.Pixel.MapBtoBsize;
  2127.      break;
  2128.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  2129.      *params = (GLfloat) CC.Pixel.MapGtoGsize;
  2130.      break;
  2131.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  2132.      *params = (GLfloat) CC.Pixel.MapItoAsize;
  2133.      break;
  2134.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  2135.      *params = (GLfloat) CC.Pixel.MapItoBsize;
  2136.      break;
  2137.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  2138.      *params = (GLfloat) CC.Pixel.MapItoGsize;
  2139.      break;
  2140.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  2141.      *params = (GLfloat) CC.Pixel.MapItoIsize;
  2142.      break;
  2143.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  2144.      *params = (GLfloat) CC.Pixel.MapItoRsize;
  2145.      break;
  2146.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  2147.      *params = (GLfloat) CC.Pixel.MapRtoRsize;
  2148.      break;
  2149.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  2150.      *params = (GLfloat) CC.Pixel.MapStoSsize;
  2151.      break;
  2152.       case GL_POINT_SIZE:
  2153.          *params = (GLfloat) CC.Point.Size;
  2154.          break;
  2155.       case GL_POINT_SIZE_GRANULARITY:
  2156.      *params = (GLfloat) POINT_SIZE_GRANULARITY;
  2157.      break;
  2158.       case GL_POINT_SIZE_RANGE:
  2159.      params[0] = (GLfloat) MIN_POINT_SIZE;
  2160.      params[1] = (GLfloat) MAX_POINT_SIZE;
  2161.      break;
  2162.       case GL_POINT_SMOOTH:
  2163.      *params = (GLfloat) CC.Point.SmoothFlag;
  2164.      break;
  2165.       case GL_POINT_SMOOTH_HINT:
  2166.      *params = (GLfloat) CC.Hint.PointSmooth;
  2167.      break;
  2168.       case GL_POLYGON_MODE:
  2169.      params[0] = (GLfloat) CC.Polygon.FrontMode;
  2170.      params[1] = (GLfloat) CC.Polygon.BackMode;
  2171.      break;
  2172.       case GL_POLYGON_OFFSET_BIAS_EXT:
  2173.          *params = CC.Polygon.OffsetBias;
  2174.          break;
  2175.       case GL_POLYGON_OFFSET_FACTOR_EXT:
  2176.          *params = CC.Polygon.OffsetFactor;
  2177.          break;
  2178.       case GL_POLYGON_SMOOTH:
  2179.      *params = (GLfloat) CC.Polygon.SmoothFlag;
  2180.      break;
  2181.       case GL_POLYGON_SMOOTH_HINT:
  2182.      *params = (GLfloat) CC.Hint.PolygonSmooth;
  2183.      break;
  2184.       case GL_POLYGON_STIPPLE:
  2185.      for (i=0;i<32;i++) {        /* RIGHT? */
  2186.         params[i] = (GLfloat) CC.PolygonStipple[i];
  2187.      }
  2188.      break;
  2189.       case GL_PROJECTION_MATRIX:
  2190.      for (i=0;i<16;i++) {
  2191.         params[i] = CC.ProjectionMatrix[i];
  2192.      }
  2193.      break;
  2194.       case GL_PROJECTION_STACK_DEPTH:
  2195.      *params = (GLfloat) CC.ProjectionStackDepth;
  2196.      break;
  2197.       case GL_READ_BUFFER:
  2198.      *params = (GLfloat) CC.Pixel.ReadBuffer;
  2199.      break;
  2200.       case GL_RED_BIAS:
  2201.          *params = CC.Pixel.RedBias;
  2202.          break;
  2203.       case GL_RED_BITS:
  2204.          *params = (GLfloat) bits( CC.RedScale );
  2205.          break;
  2206.       case GL_RED_SCALE:
  2207.          *params = CC.Pixel.RedScale;
  2208.          break;
  2209.       case GL_RENDER_MODE:
  2210.      *params = (GLfloat) CC.RenderMode;
  2211.      break;
  2212.       case GL_RGBA_MODE:
  2213.      *params = (GLfloat) CC.RGBAflag;
  2214.      break;
  2215.       case GL_SCISSOR_BOX:
  2216.      params[0] = (GLfloat) CC.Scissor.X;
  2217.      params[1] = (GLfloat) CC.Scissor.Y;
  2218.      params[2] = (GLfloat) CC.Scissor.Width;
  2219.      params[3] = (GLfloat) CC.Scissor.Height;
  2220.      break;
  2221.       case GL_SCISSOR_TEST:
  2222.      *params = (GLfloat) CC.Scissor.Enabled;
  2223.      break;
  2224.       case GL_SHADE_MODEL:
  2225.      *params = (GLfloat) CC.Light.ShadeModel;
  2226.      break;
  2227.       case GL_STENCIL_BITS:
  2228.          *params = (GLfloat) (8*sizeof(GLstencil));
  2229.          break;
  2230.       case GL_STENCIL_CLEAR_VALUE:
  2231.      *params = (GLfloat) CC.Stencil.Clear;
  2232.      break;
  2233.       case GL_STENCIL_FAIL:
  2234.      *params = (GLfloat) CC.Stencil.FailFunc;
  2235.      break;
  2236.       case GL_STENCIL_FUNC:
  2237.      *params = (GLfloat) CC.Stencil.Function;
  2238.      break;
  2239.       case GL_STENCIL_PASS_DEPTH_FAIL:
  2240.      *params = (GLfloat) CC.Stencil.ZFailFunc;
  2241.      break;
  2242.       case GL_STENCIL_PASS_DEPTH_PASS:
  2243.      *params = (GLfloat) CC.Stencil.ZPassFunc;
  2244.      break;
  2245.       case GL_STENCIL_REF:
  2246.      *params = (GLfloat) CC.Stencil.Ref;
  2247.      break;
  2248.       case GL_STENCIL_TEST:
  2249.      *params = (GLfloat) CC.Stencil.Enabled;
  2250.      break;
  2251.       case GL_STENCIL_VALUE_MASK:
  2252.      *params = (GLfloat) CC.Stencil.ValueMask;
  2253.      break;
  2254.       case GL_STENCIL_WRITEMASK:
  2255.      *params = (GLfloat) CC.Stencil.WriteMask;
  2256.      break;
  2257.       case GL_STEREO:
  2258.      *params = 0.0F;  /* TODO */
  2259.      break;
  2260.       case GL_SUBPIXEL_BITS:
  2261.      *params = 0.0F;  /* TODO */
  2262.      break;
  2263.       case GL_TEXTURE_1D:
  2264.      *params = (CC.Texture.Enabled & 1) ? 1.0 : 0.0;
  2265.      break;
  2266.       case GL_TEXTURE_2D:
  2267.      *params = (CC.Texture.Enabled & 2) ? 1.0 : 0.0;
  2268.      break;
  2269.       case GL_TEXTURE_ENV_COLOR:
  2270.      params[0] = CC.Texture.EnvColor[0];
  2271.      params[1] = CC.Texture.EnvColor[1];
  2272.      params[2] = CC.Texture.EnvColor[2];
  2273.      params[3] = CC.Texture.EnvColor[3];
  2274.      break;
  2275.       case GL_TEXTURE_ENV_MODE:
  2276.      *params = (GLfloat) CC.Texture.EnvMode;
  2277.      break;
  2278.       case GL_TEXTURE_GEN_S:
  2279.      *params = (CC.Texture.TexGenEnabled & S_BIT) ? 1.0 : 0.0;
  2280.      break;
  2281.       case GL_TEXTURE_GEN_T:
  2282.      *params = (CC.Texture.TexGenEnabled & T_BIT) ? 1.0 : 0.0;
  2283.      break;
  2284.       case GL_TEXTURE_GEN_R:
  2285.      *params = (CC.Texture.TexGenEnabled & R_BIT) ? 1.0 : 0.0;
  2286.      break;
  2287.       case GL_TEXTURE_GEN_Q:
  2288.      *params = (CC.Texture.TexGenEnabled & Q_BIT) ? 1.0 : 0.0;
  2289.      break;
  2290.       case GL_TEXTURE_MATRIX:
  2291.          for (i=0;i<16;i++) {
  2292.         params[i] = CC.TextureMatrix[i];
  2293.      }
  2294.      break;
  2295.       case GL_TEXTURE_STACK_DEPTH:
  2296.      *params = (GLfloat) CC.TextureStackDepth;
  2297.      break;
  2298.       case GL_UNPACK_ALIGNMENT:
  2299.      *params = (GLfloat) CC.UnpackAlignment;
  2300.      break;
  2301.       case GL_UNPACK_LSB_FIRST:
  2302.      *params = (GLfloat) CC.UnpackLSBFirst;
  2303.      break;
  2304.       case GL_UNPACK_ROW_LENGTH:
  2305.      *params = (GLfloat) CC.UnpackRowLength;
  2306.      break;
  2307.       case GL_UNPACK_SKIP_PIXELS:
  2308.      *params = (GLfloat) CC.UnpackSkipPixels;
  2309.      break;
  2310.       case GL_UNPACK_SKIP_ROWS:
  2311.      *params = (GLfloat) CC.UnpackSkipRows;
  2312.      break;
  2313.       case GL_UNPACK_SWAP_BYTES:
  2314.      *params = (GLfloat) CC.UnpackSwapBytes;
  2315.      break;
  2316.       case GL_VIEWPORT:
  2317.      params[0] = (GLfloat) CC.Viewport.X;
  2318.      params[1] = (GLfloat) CC.Viewport.Y;
  2319.      params[2] = (GLfloat) CC.Viewport.Width;
  2320.      params[3] = (GLfloat) CC.Viewport.Height;
  2321.      break;
  2322.       case GL_ZOOM_X:
  2323.      *params = (GLfloat) CC.Pixel.ZoomX;
  2324.      break;
  2325.       case GL_ZOOM_Y:
  2326.      *params = (GLfloat) CC.Pixel.ZoomY;
  2327.      break;
  2328.       case GL_VERTEX_ARRAY_SIZE_EXT:
  2329.          *params = (GLfloat) CC.Array.VertexSize;
  2330.          break;
  2331.       case GL_VERTEX_ARRAY_TYPE_EXT:
  2332.          *params = (GLfloat) CC.Array.VertexType;
  2333.          break;
  2334.       case GL_VERTEX_ARRAY_STRIDE_EXT:
  2335.          *params = (GLfloat) CC.Array.VertexStride;
  2336.          break;
  2337.       case GL_VERTEX_ARRAY_COUNT_EXT:
  2338.          *params = (GLfloat) CC.Array.VertexCount;
  2339.          break;
  2340.       case GL_NORMAL_ARRAY_TYPE_EXT:
  2341.          *params = (GLfloat) CC.Array.NormalType;
  2342.          break;
  2343.       case GL_NORMAL_ARRAY_STRIDE_EXT:
  2344.          *params = (GLfloat) CC.Array.NormalStride;
  2345.          break;
  2346.       case GL_NORMAL_ARRAY_COUNT_EXT:
  2347.          *params = (GLfloat) CC.Array.NormalCount;
  2348.          break;
  2349.       case GL_COLOR_ARRAY_SIZE_EXT:
  2350.          *params = (GLfloat) CC.Array.ColorSize;
  2351.          break;
  2352.       case GL_COLOR_ARRAY_TYPE_EXT:
  2353.          *params = (GLfloat) CC.Array.ColorType;
  2354.          break;
  2355.       case GL_COLOR_ARRAY_STRIDE_EXT:
  2356.          *params = (GLfloat) CC.Array.ColorStride;
  2357.          break;
  2358.       case GL_COLOR_ARRAY_COUNT_EXT:
  2359.          *params = (GLfloat) CC.Array.ColorCount;
  2360.          break;
  2361.       case GL_INDEX_ARRAY_TYPE_EXT:
  2362.          *params = (GLfloat) CC.Array.IndexType;
  2363.          break;
  2364.       case GL_INDEX_ARRAY_STRIDE_EXT:
  2365.          *params = (GLfloat) CC.Array.IndexStride;
  2366.          break;
  2367.       case GL_INDEX_ARRAY_COUNT_EXT:
  2368.          *params = (GLfloat) CC.Array.IndexCount;
  2369.          break;
  2370.       case GL_TEXTURE_COORD_ARRAY_SIZE_EXT:
  2371.          *params = (GLfloat) CC.Array.TexCoordSize;
  2372.          break;
  2373.       case GL_TEXTURE_COORD_ARRAY_TYPE_EXT:
  2374.          *params = (GLfloat) CC.Array.TexCoordType;
  2375.          break;
  2376.       case GL_TEXTURE_COORD_ARRAY_STRIDE_EXT:
  2377.          *params = (GLfloat) CC.Array.TexCoordStride;
  2378.          break;
  2379.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  2380.          *params = (GLfloat) CC.Array.TexCoordCount;
  2381.          break;
  2382.       case GL_EDGE_FLAG_ARRAY_STRIDE_EXT:
  2383.          *params = (GLfloat) CC.Array.EdgeFlagStride;
  2384.          break;
  2385.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  2386.          *params = (GLfloat) CC.Array.EdgeFlagCount;
  2387.          break;
  2388.  
  2389.       default:
  2390.          gl_error( GL_INVALID_ENUM, "glGetFloatv" );
  2391.    }
  2392. }
  2393.  
  2394.  
  2395.  
  2396.  
  2397. void glGetIntegerv( GLenum pname, GLint *params )
  2398. {
  2399.    GLuint i;
  2400.  
  2401.    if (INSIDE_BEGIN_END) {
  2402.       gl_error( GL_INVALID_OPERATION, "glGetIntegerv" );
  2403.       return;
  2404.    }
  2405.    switch (pname) {
  2406.       case GL_ACCUM_RED_BITS:
  2407.       case GL_ACCUM_GREEN_BITS:
  2408.       case GL_ACCUM_BLUE_BITS:
  2409.       case GL_ACCUM_ALPHA_BITS:
  2410.          *params = (GLint) (sizeof(GLaccum)*8);
  2411.          break;
  2412.       case GL_ACCUM_CLEAR_VALUE:
  2413.          params[0] = FLOAT_TO_INT( CC.Accum.ClearColor[0] );
  2414.          params[1] = FLOAT_TO_INT( CC.Accum.ClearColor[1] );
  2415.          params[2] = FLOAT_TO_INT( CC.Accum.ClearColor[2] );
  2416.          params[3] = FLOAT_TO_INT( CC.Accum.ClearColor[3] );
  2417.          break;
  2418.       case GL_ALPHA_BIAS:
  2419.          *params = (GLint) CC.Pixel.AlphaBias;
  2420.          break;
  2421.       case GL_ALPHA_BITS:
  2422.          if (CC.FrontAlphaEnabled || CC.BackAlphaEnabled) {
  2423.             *params = 8*sizeof(GLubyte);
  2424.          }
  2425.          else {
  2426.             *params = 0;
  2427.          }
  2428.          break;
  2429.       case GL_ALPHA_SCALE:
  2430.          *params = (GLint) CC.Pixel.AlphaScale;
  2431.          break;
  2432.       case GL_ALPHA_TEST:
  2433.          *params = (GLint) CC.Color.AlphaEnabled;
  2434.          break;
  2435.       case GL_ALPHA_TEST_REF:
  2436.          *params = FLOAT_TO_INT( CC.Color.AlphaRef );
  2437.          break;
  2438.       case GL_ALPHA_TEST_FUNC:
  2439.          *params = (GLint) CC.Color.AlphaFunc;
  2440.          break;
  2441.       case GL_ATTRIB_STACK_DEPTH:
  2442.          *params = (GLint) CC.AttribStackDepth;
  2443.          break;
  2444.       case GL_AUTO_NORMAL:
  2445.          *params = (GLint) CC.Eval.AutoNormal;
  2446.          break;
  2447.       case GL_AUX_BUFFERS:
  2448.          *params = (GLint) NUM_AUX_BUFFERS;
  2449.          break;
  2450.       case GL_BLEND:
  2451.          *params = (GLint) CC.Color.BlendEnabled;
  2452.          break;
  2453.       case GL_BLEND_DST:
  2454.          *params = (GLint) CC.Color.BlendDst;
  2455.          break;
  2456.       case GL_BLEND_SRC:
  2457.          *params = (GLint) CC.Color.BlendSrc;
  2458.          break;
  2459.       case GL_BLEND_EQUATION_EXT:
  2460.      *params = (GLint) CC.Color.BlendEquation;
  2461.      break;
  2462.       case GL_BLEND_COLOR_EXT:
  2463.      params[0] = FLOAT_TO_INT( CC.Color.BlendColor[0] );
  2464.      params[1] = FLOAT_TO_INT( CC.Color.BlendColor[1] );
  2465.      params[2] = FLOAT_TO_INT( CC.Color.BlendColor[2] );
  2466.      params[3] = FLOAT_TO_INT( CC.Color.BlendColor[3] );
  2467.      break;
  2468.       case GL_BLUE_BIAS:
  2469.          *params = (GLint) CC.Pixel.BlueBias;
  2470.          break;
  2471.       case GL_BLUE_BITS:
  2472.          *params = (GLint) bits( CC.BlueScale );
  2473.          break;
  2474.       case GL_BLUE_SCALE:
  2475.          *params = (GLint) CC.Pixel.BlueScale;
  2476.          break;
  2477.       case GL_CLIP_PLANE0:
  2478.       case GL_CLIP_PLANE1:
  2479.       case GL_CLIP_PLANE2:
  2480.       case GL_CLIP_PLANE3:
  2481.       case GL_CLIP_PLANE4:
  2482.       case GL_CLIP_PLANE5:
  2483.          i = (GLint) (pname - GL_CLIP_PLANE0);
  2484.          *params = (GLint) CC.Transform.ClipEnabled[i];
  2485.          break;
  2486.       case GL_COLOR_CLEAR_VALUE:
  2487.          params[0] = FLOAT_TO_INT( CC.Color.ClearColor[0] );
  2488.          params[1] = FLOAT_TO_INT( CC.Color.ClearColor[1] );
  2489.          params[2] = FLOAT_TO_INT( CC.Color.ClearColor[2] );
  2490.          params[3] = FLOAT_TO_INT( CC.Color.ClearColor[3] );
  2491.          break;
  2492.       case GL_COLOR_MATERIAL:
  2493.          *params = (GLint) CC.Light.ColorMaterialEnabled;
  2494.          break;
  2495.       case GL_COLOR_MATERIAL_FACE:
  2496.          *params = (GLint) CC.Light.ColorMaterialFace;
  2497.          break;
  2498.       case GL_COLOR_MATERIAL_PARAMETER:
  2499.          *params = (GLint) CC.Light.ColorMaterialMode;
  2500.          break;
  2501.       case GL_COLOR_WRITEMASK:
  2502.          params[0] = (CC.Color.ColorMask & 8) ? 1 : 0;
  2503.          params[1] = (CC.Color.ColorMask & 4) ? 1 : 0;
  2504.          params[2] = (CC.Color.ColorMask & 2) ? 1 : 0;
  2505.          params[3] = (CC.Color.ColorMask & 1) ? 1 : 0;
  2506.          break;
  2507.       case GL_CULL_FACE:
  2508.          *params = (GLint) CC.Polygon.CullFlag;
  2509.          break;
  2510.       case GL_CULL_FACE_MODE:
  2511.          *params = (GLint) CC.Polygon.CullFaceMode;
  2512.          break;
  2513.       case GL_CURRENT_COLOR:
  2514.          params[0] = FLOAT_TO_INT( (CC.Current.IntColor[0]/CC.RedScale) );
  2515.          params[1] = FLOAT_TO_INT( (CC.Current.IntColor[1]/CC.GreenScale) );
  2516.          params[2] = FLOAT_TO_INT( (CC.Current.IntColor[2]/CC.BlueScale) );
  2517.          params[3] = FLOAT_TO_INT( (CC.Current.IntColor[3]/CC.AlphaScale) );
  2518.          break;
  2519.       case GL_CURRENT_INDEX:
  2520.          *params = (GLint) CC.Current.Index;
  2521.          break;
  2522.       case GL_CURRENT_NORMAL:
  2523.          params[0] = FLOAT_TO_INT( CC.Current.Normal[0] );
  2524.          params[1] = FLOAT_TO_INT( CC.Current.Normal[1] );
  2525.          params[2] = FLOAT_TO_INT( CC.Current.Normal[2] );
  2526.          break;
  2527.       case GL_CURRENT_RASTER_COLOR:
  2528.      params[0] = FLOAT_TO_INT( CC.Current.RasterColor[0] );
  2529.      params[1] = FLOAT_TO_INT( CC.Current.RasterColor[1] );
  2530.      params[2] = FLOAT_TO_INT( CC.Current.RasterColor[2] );
  2531.      params[3] = FLOAT_TO_INT( CC.Current.RasterColor[3] );
  2532.      break;
  2533.       case GL_CURRENT_RASTER_DISTANCE:
  2534.      params[0] = (GLint) CC.Current.RasterDistance;
  2535.      break;
  2536.       case GL_CURRENT_RASTER_INDEX:
  2537.      *params = (GLint) CC.Current.RasterIndex;
  2538.      break;
  2539.       case GL_CURRENT_RASTER_POSITION:
  2540.      params[0] = (GLint) CC.Current.RasterPos[0];
  2541.      params[1] = (GLint) CC.Current.RasterPos[1];
  2542.      params[2] = (GLint) CC.Current.RasterPos[2];
  2543.      params[3] = (GLint) CC.Current.RasterPos[3];
  2544.      break;
  2545.       case GL_CURRENT_RASTER_TEXTURE_COORDS:
  2546.      params[0] = (GLint) CC.Current.RasterTexCoord[0];
  2547.      params[1] = (GLint) CC.Current.RasterTexCoord[1];
  2548.      params[2] = (GLint) CC.Current.RasterTexCoord[2];
  2549.      params[3] = (GLint) CC.Current.RasterTexCoord[3];
  2550.      break;
  2551.       case GL_CURRENT_RASTER_POSITION_VALID:
  2552.      *params = (GLint) CC.Current.RasterPosValid;
  2553.      break;
  2554.       case GL_CURRENT_TEXTURE_COORDS:
  2555.          params[0] = (GLint) CC.Current.TexCoord[0];
  2556.          params[1] = (GLint) CC.Current.TexCoord[1];
  2557.          params[2] = (GLint) CC.Current.TexCoord[2];
  2558.          params[3] = (GLint) CC.Current.TexCoord[3];
  2559.      break;
  2560.       case GL_DEPTH_BIAS:
  2561.          *params = (GLint) CC.Pixel.DepthBias;
  2562.      break;
  2563.       case GL_DEPTH_BITS:
  2564.      *params = 8*sizeof(GLdepth);
  2565.      break;
  2566.       case GL_DEPTH_CLEAR_VALUE:
  2567.          *params = (GLint) CC.Depth.Clear;
  2568.      break;
  2569.       case GL_DEPTH_FUNC:
  2570.          *params = (GLint) CC.Depth.Func;
  2571.      break;
  2572.       case GL_DEPTH_RANGE:
  2573.          params[0] = (GLint) CC.Viewport.Near;
  2574.          params[1] = (GLint) CC.Viewport.Far;
  2575.      break;
  2576.       case GL_DEPTH_SCALE:
  2577.          *params = (GLint) CC.Pixel.DepthScale;
  2578.      break;
  2579.       case GL_DEPTH_TEST:
  2580.          *params = (GLint) CC.Depth.Test;
  2581.      break;
  2582.       case GL_DEPTH_WRITEMASK:
  2583.      *params = (GLint) CC.Depth.Mask;
  2584.      break;
  2585.       case GL_DITHER:
  2586.      *params = (GLint) CC.Color.DitherFlag;
  2587.      break;
  2588.       case GL_DOUBLEBUFFER:
  2589.      *params = (GLint) CC.DBflag;
  2590.      break;
  2591.       case GL_DRAW_BUFFER:
  2592.      *params = (GLint) CC.Color.DrawBuffer;
  2593.      break;
  2594.       case GL_EDGE_FLAG:
  2595.      *params = (GLint) CC.Current.EdgeFlag;
  2596.      break;
  2597.       case GL_FOG:
  2598.      *params = (GLint) CC.Fog.Enabled;
  2599.      break;
  2600.       case GL_FOG_COLOR:
  2601.      params[0] = FLOAT_TO_INT( CC.Fog.Color[0] );
  2602.      params[1] = FLOAT_TO_INT( CC.Fog.Color[1] );
  2603.      params[2] = FLOAT_TO_INT( CC.Fog.Color[2] );
  2604.      params[3] = FLOAT_TO_INT( CC.Fog.Color[3] );
  2605.      break;
  2606.       case GL_FOG_DENSITY:
  2607.      *params = (GLint) CC.Fog.Density;
  2608.      break;
  2609.       case GL_FOG_END:
  2610.      *params = (GLint) CC.Fog.End;
  2611.      break;
  2612.       case GL_FOG_HINT:
  2613.      *params = (GLint) CC.Hint.Fog;
  2614.      break;
  2615.       case GL_FOG_INDEX:
  2616.      *params = (GLint) CC.Fog.Index;
  2617.      break;
  2618.       case GL_FOG_MODE:
  2619.      *params = (GLint) CC.Fog.Mode;
  2620.      break;
  2621.       case GL_FOG_START:
  2622.      *params = (GLint) CC.Fog.Start;
  2623.      break;
  2624.       case GL_FRONT_FACE:
  2625.      *params = (GLint) CC.Polygon.FrontFace;
  2626.      break;
  2627.       case GL_GREEN_BIAS:
  2628.          *params = (GLint) CC.Pixel.GreenBias;
  2629.          break;
  2630.       case GL_GREEN_BITS:
  2631.          *params = (GLint) bits( CC.GreenScale );
  2632.          break;
  2633.       case GL_GREEN_SCALE:
  2634.          *params = (GLint) CC.Pixel.GreenScale;
  2635.          break;
  2636.       case GL_INDEX_BITS:
  2637.      {
  2638.         GLuint width, height, depth;
  2639.         (*DD.buffer_size)( &width, &height, &depth );
  2640.         *params = (GLint) depth;
  2641.      }
  2642.          break;
  2643.       case GL_INDEX_CLEAR_VALUE:
  2644.          *params = (GLint) CC.Color.ClearIndex;
  2645.          break;
  2646.       case GL_INDEX_MODE:
  2647.      *params = CC.RGBAflag ? 0 : 1;
  2648.      break;
  2649.       case GL_INDEX_OFFSET:
  2650.      *params = CC.Pixel.IndexOffset;
  2651.      break;
  2652.       case GL_INDEX_SHIFT:
  2653.      *params = CC.Pixel.IndexShift;
  2654.      break;
  2655.       case GL_INDEX_WRITEMASK:
  2656.      *params = (GLint) CC.Color.IndexMask;
  2657.      break;
  2658.       case GL_LIGHT0:
  2659.       case GL_LIGHT1:
  2660.       case GL_LIGHT2:
  2661.       case GL_LIGHT3:
  2662.       case GL_LIGHT4:
  2663.       case GL_LIGHT5:
  2664.       case GL_LIGHT6:
  2665.       case GL_LIGHT7:
  2666.      *params = (GLint) CC.Light.Light[pname-GL_LIGHT0].Enabled;
  2667.      break;
  2668.       case GL_LIGHTING:
  2669.      *params = (GLint) CC.Light.Enabled;
  2670.      break;
  2671.       case GL_LIGHT_MODEL_AMBIENT:
  2672.      params[0] = FLOAT_TO_INT( CC.Light.Model.Ambient[0] );
  2673.      params[1] = FLOAT_TO_INT( CC.Light.Model.Ambient[1] );
  2674.      params[2] = FLOAT_TO_INT( CC.Light.Model.Ambient[2] );
  2675.      params[3] = FLOAT_TO_INT( CC.Light.Model.Ambient[3] );
  2676.      break;
  2677.       case GL_LIGHT_MODEL_LOCAL_VIEWER:
  2678.      *params = (GLint) CC.Light.Model.LocalViewer;
  2679.      break;
  2680.       case GL_LIGHT_MODEL_TWO_SIDE:
  2681.      *params = (GLint) CC.Light.Model.TwoSide;
  2682.      break;
  2683.       case GL_LINE_SMOOTH:
  2684.      *params = (GLint) CC.Line.SmoothFlag;
  2685.      break;
  2686.       case GL_LINE_SMOOTH_HINT:
  2687.      *params = (GLint) CC.Hint.LineSmooth;
  2688.      break;
  2689.       case GL_LINE_STIPPLE:
  2690.      *params = (GLint) CC.Line.StippleFlag;
  2691.      break;
  2692.       case GL_LINE_STIPPLE_PATTERN:
  2693.          *params = (GLint) CC.Line.StipplePattern;
  2694.          break;
  2695.       case GL_LINE_STIPPLE_REPEAT:
  2696.          *params = (GLint) CC.Line.StippleFactor;
  2697.          break;
  2698.       case GL_LINE_WIDTH:
  2699.      *params = (GLint) CC.Line.Width;
  2700.      break;
  2701.       case GL_LINE_WIDTH_GRANULARITY:
  2702.      *params = (GLint) LINE_WIDTH_GRANULARITY;
  2703.      break;
  2704.       case GL_LINE_WIDTH_RANGE:
  2705.      params[0] = (GLint) MIN_LINE_WIDTH;
  2706.      params[1] = (GLint) MAX_LINE_WIDTH;
  2707.      break;
  2708.       case GL_LIST_BASE:
  2709.      *params = (GLint) CC.List.ListBase;
  2710.      break;
  2711.       case GL_LIST_INDEX:
  2712.      *params = (GLint) gl_list_index();
  2713.      break;
  2714.       case GL_LIST_MODE:
  2715.      *params = CC.ExecuteFlag ? (GLint) GL_COMPILE_AND_EXECUTE
  2716.                      : (GLint) GL_COMPILE;
  2717.      break;
  2718.       case GL_LOGIC_OP:
  2719.      *params = (GLint) CC.Color.LogicOpEnabled;
  2720.      break;
  2721.       case GL_LOGIC_OP_MODE:
  2722.          *params = (GLint) CC.Color.LogicOp;
  2723.          break;
  2724.       case GL_MAP1_COLOR_4:
  2725.      *params = (GLint) CC.Eval.Map1Color4;
  2726.      break;
  2727.       case GL_MAP1_GRID_DOMAIN:
  2728.      params[0] = (GLint) CC.Eval.MapGrid1u1;
  2729.      params[1] = (GLint) CC.Eval.MapGrid1u2;
  2730.      break;
  2731.       case GL_MAP1_GRID_SEGMENTS:
  2732.      *params = (GLint) CC.Eval.MapGrid1un;
  2733.      break;
  2734.       case GL_MAP1_INDEX:
  2735.      *params = (GLint) CC.Eval.Map1Index;
  2736.      break;
  2737.       case GL_MAP1_NORMAL:
  2738.      *params = (GLint) CC.Eval.Map1Normal;
  2739.      break;
  2740.       case GL_MAP1_TEXTURE_COORD_1:
  2741.      *params = (GLint) CC.Eval.Map1TextureCoord1;
  2742.      break;
  2743.       case GL_MAP1_TEXTURE_COORD_2:
  2744.      *params = (GLint) CC.Eval.Map1TextureCoord2;
  2745.      break;
  2746.       case GL_MAP1_TEXTURE_COORD_3:
  2747.      *params = (GLint) CC.Eval.Map1TextureCoord3;
  2748.      break;
  2749.       case GL_MAP1_TEXTURE_COORD_4:
  2750.      *params = (GLint) CC.Eval.Map1TextureCoord4;
  2751.      break;
  2752.       case GL_MAP1_VERTEX_3:
  2753.      *params = (GLint) CC.Eval.Map1Vertex3;
  2754.      break;
  2755.       case GL_MAP1_VERTEX_4:
  2756.      *params = (GLint) CC.Eval.Map1Vertex4;
  2757.      break;
  2758.       case GL_MAP2_COLOR_4:
  2759.      *params = (GLint) CC.Eval.Map2Color4;
  2760.      break;
  2761.       case GL_MAP2_GRID_DOMAIN:
  2762.      params[0] = (GLint) CC.Eval.MapGrid2u1;
  2763.      params[1] = (GLint) CC.Eval.MapGrid2u2;
  2764.      params[2] = (GLint) CC.Eval.MapGrid2v1;
  2765.      params[3] = (GLint) CC.Eval.MapGrid2v2;
  2766.      break;
  2767.       case GL_MAP2_GRID_SEGMENTS:
  2768.      params[0] = (GLint) CC.Eval.MapGrid2un;
  2769.      params[1] = (GLint) CC.Eval.MapGrid2vn;
  2770.      break;
  2771.       case GL_MAP2_INDEX:
  2772.      *params = (GLint) CC.Eval.Map2Index;
  2773.      break;
  2774.       case GL_MAP2_NORMAL:
  2775.      *params = (GLint) CC.Eval.Map2Normal;
  2776.      break;
  2777.       case GL_MAP2_TEXTURE_COORD_1:
  2778.      *params = (GLint) CC.Eval.Map2TextureCoord1;
  2779.      break;
  2780.       case GL_MAP2_TEXTURE_COORD_2:
  2781.      *params = (GLint) CC.Eval.Map2TextureCoord2;
  2782.      break;
  2783.       case GL_MAP2_TEXTURE_COORD_3:
  2784.      *params = (GLint) CC.Eval.Map2TextureCoord3;
  2785.      break;
  2786.       case GL_MAP2_TEXTURE_COORD_4:
  2787.      *params = (GLint) CC.Eval.Map2TextureCoord4;
  2788.      break;
  2789.       case GL_MAP2_VERTEX_3:
  2790.      *params = (GLint) CC.Eval.Map2Vertex3;
  2791.      break;
  2792.       case GL_MAP2_VERTEX_4:
  2793.      *params = (GLint) CC.Eval.Map2Vertex4;
  2794.      break;
  2795.       case GL_MAP_COLOR:
  2796.      *params = (GLint) CC.Pixel.MapColorFlag;
  2797.      break;
  2798.       case GL_MAP_STENCIL:
  2799.      *params = (GLint) CC.Pixel.MapStencilFlag;
  2800.      break;
  2801.       case GL_MATRIX_MODE:
  2802.      *params = (GLint) CC.Transform.MatrixMode;
  2803.      break;
  2804.       case GL_MAX_ATTRIB_STACK_DEPTH:
  2805.          *params = (GLint) MAX_ATTRIB_STACK_DEPTH;
  2806.          break;
  2807.       case GL_MAX_CLIP_PLANES:
  2808.          *params = (GLint) MAX_CLIP_PLANES;
  2809.          break;
  2810.       case GL_MAX_EVAL_ORDER:
  2811.      *params = (GLint) MAX_EVAL_ORDER;
  2812.      break;
  2813.       case GL_MAX_LIGHTS:
  2814.          *params = (GLint) MAX_LIGHTS;
  2815.          break;
  2816.       case GL_MAX_LIST_NESTING:
  2817.          *params = (GLint) MAX_LIST_NESTING;
  2818.          break;
  2819.       case GL_MAX_MODELVIEW_STACK_DEPTH:
  2820.          *params = (GLint) MAX_MODELVIEW_STACK_DEPTH;
  2821.          break;
  2822.       case GL_MAX_NAME_STACK_DEPTH:
  2823.      *params = (GLint) MAX_NAME_STACK_DEPTH;
  2824.      break;
  2825.       case GL_MAX_PIXEL_MAP_TABLE:
  2826.      *params = (GLint) MAX_PIXEL_MAP_TABLE;
  2827.      break;
  2828.       case GL_MAX_PROJECTION_STACK_DEPTH:
  2829.          *params = (GLint) MAX_PROJECTION_STACK_DEPTH;
  2830.          break;
  2831.       case GL_MAX_TEXTURE_SIZE:
  2832.      *params = (GLint) MAX_TEXTURE_SIZE;
  2833.      break;
  2834.       case GL_MAX_TEXTURE_STACK_DEPTH:
  2835.      *params = (GLint) MAX_TEXTURE_STACK_DEPTH;
  2836.      break;
  2837.       case GL_MAX_VIEWPORT_DIMS:
  2838.          params[0] = (GLint) MAX_WIDTH;
  2839.          params[1] = (GLint) MAX_HEIGHT;
  2840.          break;
  2841.       case GL_MODELVIEW_MATRIX:
  2842.      for (i=0;i<16;i++) {
  2843.         params[i] = (GLint) CC.ModelViewMatrix[i];
  2844.      }
  2845.      break;
  2846.       case GL_MODELVIEW_STACK_DEPTH:
  2847.      *params = (GLint) CC.ModelViewStackDepth;
  2848.      break;
  2849.       case GL_NAME_STACK_DEPTH:
  2850.      *params = (GLint) CC.NameStackDepth;
  2851.      break;
  2852.       case GL_NORMALIZE:
  2853.      *params = (GLint) CC.Transform.Normalize;
  2854.      break;
  2855.       case GL_PACK_ALIGNMENT:
  2856.      *params = CC.PackAlignment;
  2857.      break;
  2858.       case GL_PACK_LSB_FIRST:
  2859.      *params = (GLint) CC.PackLSBFirst;
  2860.      break;
  2861.       case GL_PACK_ROW_LENGTH:
  2862.      *params = CC.PackRowLength;
  2863.      break;
  2864.       case GL_PACK_SKIP_PIXELS:
  2865.      *params = CC.PackSkipPixels;
  2866.      break;
  2867.       case GL_PACK_SKIP_ROWS:
  2868.      *params = CC.PackSkipRows;
  2869.      break;
  2870.       case GL_PACK_SWAP_BYTES:
  2871.      *params = (GLint) CC.PackSwapBytes;
  2872.      break;
  2873.       case GL_PERSPECTIVE_CORRECTION_HINT:
  2874.      *params = (GLint) CC.Hint.PerspectiveCorrection;
  2875.      break;
  2876.       case GL_PIXEL_MAP_A_TO_A_SIZE:
  2877.      *params = CC.Pixel.MapAtoAsize;
  2878.      break;
  2879.       case GL_PIXEL_MAP_B_TO_B_SIZE:
  2880.      *params = CC.Pixel.MapBtoBsize;
  2881.      break;
  2882.       case GL_PIXEL_MAP_G_TO_G_SIZE:
  2883.      *params = CC.Pixel.MapGtoGsize;
  2884.      break;
  2885.       case GL_PIXEL_MAP_I_TO_A_SIZE:
  2886.      *params = CC.Pixel.MapItoAsize;
  2887.      break;
  2888.       case GL_PIXEL_MAP_I_TO_B_SIZE:
  2889.      *params = CC.Pixel.MapItoBsize;
  2890.      break;
  2891.       case GL_PIXEL_MAP_I_TO_G_SIZE:
  2892.      *params = CC.Pixel.MapItoGsize;
  2893.      break;
  2894.       case GL_PIXEL_MAP_I_TO_I_SIZE:
  2895.      *params = CC.Pixel.MapItoIsize;
  2896.      break;
  2897.       case GL_PIXEL_MAP_I_TO_R_SIZE:
  2898.      *params = CC.Pixel.MapItoRsize;
  2899.      break;
  2900.       case GL_PIXEL_MAP_R_TO_R_SIZE:
  2901.      *params = CC.Pixel.MapRtoRsize;
  2902.      break;
  2903.       case GL_PIXEL_MAP_S_TO_S_SIZE:
  2904.      *params = CC.Pixel.MapStoSsize;
  2905.      break;
  2906.       case GL_POINT_SIZE:
  2907.          *params = (GLint) CC.Point.Size;
  2908.          break;
  2909.       case GL_POINT_SIZE_GRANULARITY:
  2910.      *params = (GLint) POINT_SIZE_GRANULARITY;
  2911.      break;
  2912.       case GL_POINT_SIZE_RANGE:
  2913.      params[0] = (GLint) MIN_POINT_SIZE;
  2914.      params[1] = (GLint) MAX_POINT_SIZE;
  2915.      break;
  2916.       case GL_POINT_SMOOTH:
  2917.      *params = (GLint) CC.Point.SmoothFlag;
  2918.      break;
  2919.       case GL_POINT_SMOOTH_HINT:
  2920.      *params = (GLint) CC.Hint.PointSmooth;
  2921.      break;
  2922.       case GL_POLYGON_MODE:
  2923.      params[0] = (GLint) CC.Polygon.FrontMode;
  2924.      params[1] = (GLint) CC.Polygon.BackMode;
  2925.      break;
  2926.       case GL_POLYGON_OFFSET_BIAS_EXT:
  2927.          *params = (GLint) CC.Polygon.OffsetBias;
  2928.          break;
  2929.       case GL_POLYGON_OFFSET_FACTOR_EXT:
  2930.          *params = (GLint) CC.Polygon.OffsetFactor;
  2931.          break;
  2932.       case GL_POLYGON_SMOOTH:
  2933.      *params = (GLint) CC.Polygon.SmoothFlag;
  2934.      break;
  2935.       case GL_POLYGON_SMOOTH_HINT:
  2936.      *params = (GLint) CC.Hint.PolygonSmooth;
  2937.      break;
  2938.       case GL_POLYGON_STIPPLE:
  2939.      for (i=0;i<32;i++) {        /* RIGHT? */
  2940.         params[i] = (GLint) CC.PolygonStipple[i];
  2941.      }
  2942.      break;
  2943.       case GL_PROJECTION_MATRIX:
  2944.      for (i=0;i<16;i++) {
  2945.         params[i] = (GLint) CC.ProjectionMatrix[i];
  2946.      }
  2947.      break;
  2948.       case GL_PROJECTION_STACK_DEPTH:
  2949.      *params = (GLint) CC.ProjectionStackDepth;
  2950.      break;
  2951.       case GL_READ_BUFFER:
  2952.      *params = (GLint) CC.Pixel.ReadBuffer;
  2953.      break;
  2954.       case GL_RED_BIAS:
  2955.          *params = (GLint) CC.Pixel.RedBias;
  2956.          break;
  2957.       case GL_RED_BITS:
  2958.          *params = (GLint) bits( CC.RedScale );
  2959.          break;
  2960.       case GL_RED_SCALE:
  2961.          *params = (GLint) CC.Pixel.RedScale;
  2962.          break;
  2963.       case GL_RENDER_MODE:
  2964.      *params = (GLint) CC.RenderMode;
  2965.      break;
  2966.       case GL_RGBA_MODE:
  2967.      *params = (GLint) CC.RGBAflag;
  2968.      break;
  2969.       case GL_SCISSOR_BOX:
  2970.      params[0] = (GLint) CC.Scissor.X;
  2971.      params[1] = (GLint) CC.Scissor.Y;
  2972.      params[2] = (GLint) CC.Scissor.Width;
  2973.      params[3] = (GLint) CC.Scissor.Height;
  2974.      break;
  2975.       case GL_SCISSOR_TEST:
  2976.      *params = (GLint) CC.Scissor.Enabled;
  2977.      break;
  2978.       case GL_SHADE_MODEL:
  2979.      *params = (GLint) CC.Light.ShadeModel;
  2980.      break;
  2981.       case GL_STENCIL_BITS:
  2982.          *params = 8*sizeof(GLstencil);
  2983.          break;
  2984.       case GL_STENCIL_CLEAR_VALUE:
  2985.      *params = (GLint) CC.Stencil.Clear;
  2986.      break;
  2987.       case GL_STENCIL_FAIL:
  2988.      *params = (GLint) CC.Stencil.FailFunc;
  2989.      break;
  2990.       case GL_STENCIL_FUNC:
  2991.      *params = (GLint) CC.Stencil.Function;
  2992.      break;
  2993.       case GL_STENCIL_PASS_DEPTH_FAIL:
  2994.      *params = (GLint) CC.Stencil.ZFailFunc;
  2995.      break;
  2996.       case GL_STENCIL_PASS_DEPTH_PASS:
  2997.      *params = (GLint) CC.Stencil.ZPassFunc;
  2998.      break;
  2999.       case GL_STENCIL_REF:
  3000.      *params = (GLint) CC.Stencil.Ref;
  3001.      break;
  3002.       case GL_STENCIL_TEST:
  3003.      *params = (GLint) CC.Stencil.Enabled;
  3004.      break;
  3005.       case GL_STENCIL_VALUE_MASK:
  3006.      *params = (GLint) CC.Stencil.ValueMask;
  3007.      break;
  3008.       case GL_STENCIL_WRITEMASK:
  3009.      *params = (GLint) CC.Stencil.WriteMask;
  3010.      break;
  3011.       case GL_STEREO:
  3012.      *params = 0;  /* TODO */
  3013.      break;
  3014.       case GL_SUBPIXEL_BITS:
  3015.      *params = 0;  /* TODO */
  3016.      break;
  3017.       case GL_TEXTURE_1D:
  3018.      *params = (CC.Texture.Enabled & 1) ? 1.0 : 0.0;
  3019.      break;
  3020.       case GL_TEXTURE_2D:
  3021.      *params = (CC.Texture.Enabled & 2) ? 1.0 : 0.0;
  3022.      break;
  3023.       case GL_TEXTURE_ENV_COLOR:
  3024.      params[0] = FLOAT_TO_INT( CC.Texture.EnvColor[0] );
  3025.      params[1] = FLOAT_TO_INT( CC.Texture.EnvColor[1] );
  3026.      params[2] = FLOAT_TO_INT( CC.Texture.EnvColor[2] );
  3027.      params[3] = FLOAT_TO_INT( CC.Texture.EnvColor[3] );
  3028.      break;
  3029.       case GL_TEXTURE_ENV_MODE:
  3030.      *params = (GLint) CC.Texture.EnvMode;
  3031.      break;
  3032.       case GL_TEXTURE_GEN_S:
  3033.      *params = (CC.Texture.TexGenEnabled & S_BIT) ? 1 : 0;
  3034.      break;
  3035.       case GL_TEXTURE_GEN_T:
  3036.      *params = (CC.Texture.TexGenEnabled & T_BIT) ? 1 : 0;
  3037.      break;
  3038.       case GL_TEXTURE_GEN_R:
  3039.      *params = (CC.Texture.TexGenEnabled & R_BIT) ? 1 : 0;
  3040.      break;
  3041.       case GL_TEXTURE_GEN_Q:
  3042.      *params = (CC.Texture.TexGenEnabled & Q_BIT) ? 1 : 0;
  3043.      break;
  3044.       case GL_TEXTURE_MATRIX:
  3045.          for (i=0;i<16;i++) {
  3046.         params[i] = (GLint) CC.TextureMatrix[i];
  3047.      }
  3048.      break;
  3049.       case GL_TEXTURE_STACK_DEPTH:
  3050.      *params = (GLint) CC.TextureStackDepth;
  3051.      break;
  3052.       case GL_UNPACK_ALIGNMENT:
  3053.      *params = CC.UnpackAlignment;
  3054.      break;
  3055.       case GL_UNPACK_LSB_FIRST:
  3056.      *params = (GLint) CC.UnpackLSBFirst;
  3057.      break;
  3058.       case GL_UNPACK_ROW_LENGTH:
  3059.      *params = CC.UnpackRowLength;
  3060.      break;
  3061.       case GL_UNPACK_SKIP_PIXELS:
  3062.      *params = CC.UnpackSkipPixels;
  3063.      break;
  3064.       case GL_UNPACK_SKIP_ROWS:
  3065.      *params = CC.UnpackSkipRows;
  3066.      break;
  3067.       case GL_UNPACK_SWAP_BYTES:
  3068.      *params = (GLint) CC.UnpackSwapBytes;
  3069.      break;
  3070.       case GL_VIEWPORT:
  3071.          params[0] = (GLint) CC.Viewport.X;
  3072.          params[1] = (GLint) CC.Viewport.Y;
  3073.          params[2] = (GLint) CC.Viewport.Width;
  3074.          params[3] = (GLint) CC.Viewport.Height;
  3075.          break;
  3076.       case GL_ZOOM_X:
  3077.      *params = (GLint) CC.Pixel.ZoomX;
  3078.      break;
  3079.       case GL_ZOOM_Y:
  3080.      *params = (GLint) CC.Pixel.ZoomY;
  3081.      break;
  3082.       case GL_VERTEX_ARRAY_SIZE_EXT:
  3083.          *params = CC.Array.VertexSize;
  3084.          break;
  3085.       case GL_VERTEX_ARRAY_TYPE_EXT:
  3086.          *params = CC.Array.VertexType;
  3087.          break;
  3088.       case GL_VERTEX_ARRAY_STRIDE_EXT:
  3089.          *params = CC.Array.VertexStride;
  3090.          break;
  3091.       case GL_VERTEX_ARRAY_COUNT_EXT:
  3092.          *params = CC.Array.VertexCount;
  3093.          break;
  3094.       case GL_NORMAL_ARRAY_TYPE_EXT:
  3095.          *params = CC.Array.NormalType;
  3096.          break;
  3097.       case GL_NORMAL_ARRAY_STRIDE_EXT:
  3098.          *params = CC.Array.NormalStride;
  3099.          break;
  3100.       case GL_NORMAL_ARRAY_COUNT_EXT:
  3101.          *params = CC.Array.NormalCount;
  3102.          break;
  3103.       case GL_COLOR_ARRAY_SIZE_EXT:
  3104.          *params = CC.Array.ColorSize;
  3105.          break;
  3106.       case GL_COLOR_ARRAY_TYPE_EXT:
  3107.          *params = CC.Array.ColorType;
  3108.          break;
  3109.       case GL_COLOR_ARRAY_STRIDE_EXT:
  3110.          *params = CC.Array.ColorStride;
  3111.          break;
  3112.       case GL_COLOR_ARRAY_COUNT_EXT:
  3113.          *params = CC.Array.ColorCount;
  3114.          break;
  3115.       case GL_INDEX_ARRAY_TYPE_EXT:
  3116.          *params = CC.Array.IndexType;
  3117.          break;
  3118.       case GL_INDEX_ARRAY_STRIDE_EXT:
  3119.          *params = CC.Array.IndexStride;
  3120.          break;
  3121.       case GL_INDEX_ARRAY_COUNT_EXT:
  3122.          *params = CC.Array.IndexCount;
  3123.          break;
  3124.       case GL_TEXTURE_COORD_ARRAY_SIZE_EXT:
  3125.          *params = CC.Array.TexCoordSize;
  3126.          break;
  3127.       case GL_TEXTURE_COORD_ARRAY_TYPE_EXT:
  3128.          *params = CC.Array.TexCoordType;
  3129.          break;
  3130.       case GL_TEXTURE_COORD_ARRAY_STRIDE_EXT:
  3131.          *params = CC.Array.TexCoordStride;
  3132.          break;
  3133.       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
  3134.          *params = CC.Array.TexCoordCount;
  3135.          break;
  3136.       case GL_EDGE_FLAG_ARRAY_STRIDE_EXT:
  3137.          *params = CC.Array.EdgeFlagStride;
  3138.          break;
  3139.       case GL_EDGE_FLAG_ARRAY_COUNT_EXT:
  3140.          *params = CC.Array.EdgeFlagCount;
  3141.          break;
  3142.  
  3143.       default:
  3144.          gl_error( GL_INVALID_ENUM, "glGetIntegerv" );
  3145.    }
  3146. }
  3147.  
  3148.